설정¶
클라이언트 설정과 DynaPath 토큰 설정, 환경변수로 설정을 만드는 함수입니다.
KorailConfig
¶
KorailConfig(
base_url: str = KORAIL_BASE_URL,
device: str = KORAIL_DEVICE_ANDROID,
version: str = KORAIL_API_VERSION,
key: str = KORAIL_APP_KEY,
timeout: float = KORAIL_TIMEOUT_SECONDS,
user_agent: str = KORAIL_API_USER_AGENT,
dynapath: DynapathConfig = DynapathConfig(),
device_width: int = KORAIL_DEFAULT_DEVICE_WIDTH,
device_height: int = KORAIL_DEFAULT_DEVICE_HEIGHT,
android_sdk_int: int = KORAIL_DEFAULT_ANDROID_SDK_INT,
advertising_id: str = "",
netfunnel_url: str = KORAIL_NETFUNNEL_URL,
netfunnel_timeout: float = KORAIL_NETFUNNEL_TIMEOUT_SECONDS,
netfunnel_user_agent: str = KORAIL_USER_AGENT,
netfunnel_enabled: bool = True,
lang: str | None = None,
netfunnel_wait_limit: float | None = None,
netfunnel_actions: Mapping[str, str] | None = None,
disable_dynapath: bool = False,
app_version: str | None = KORAIL_APP_VERSION,
)
API·대기열·기기·인증 토큰의 요청 설정을 구성합니다.
base_url과 netfunnel_url은 검사하지 않고 그대로 씁니다. base_url이 다른 서버를 가리키면 로그인 자격 증명도
그 서버로 갑니다. 대기열 요청에는 자격 증명을 싣지 않지만, netfunnel_url이 다른 서버를 가리키면 API 요청을 보낼지와
언제 보낼지를 그 서버가 정합니다. 신뢰할 수 있는 주소가 아니면 바꾸지 마세요.
netfunnel_user_agent
¶
대기열 요청의 User-Agent 헤더입니다. 앱의 대기열 요청은 안드로이드 기본 User-Agent(Dalvik/2.1.0 (...))를 쓰므로 기본값도 이 형식입니다. DynaPath 기기값을 바꾸면 이 값의 안드로이드 버전·기기 모델도 같게 맞추세요. build_config_from_env로 만든 설정은 기본적으로 두 값에 같은 기기값을 씁니다.
netfunnel_enabled
¶
대기열을 거칠지 정합니다. 기본값은 True입니다. False이면 대기열 없이 모든 요청을 바로 보내므로 앱과 다르게 동작합니다.
lang
¶
요청의 언어 필드(lang)입니다. None이면 보내지 않습니다. 앱이 보내는 값은 앱 내부 값이 공개돼 있지 않아 확인하지 못했습니다.
netfunnel_wait_limit
¶
대기열에서 기다릴 누적 시간의 상한(초)입니다. None이면 제한하지 않습니다. 상한을 넘으면 API 요청을 보내지 않고 KorailNetFunnelError를 발생시킵니다.
netfunnel_actions
¶
관문별 대기열 식별값을 바꿉니다. 관문 이름(inquiry, peak_season_inquiry, product_inquiry, reserve, pay, reservation_view)을 키로, 보낼 식별값을 값으로 받습니다. 기본 식별값은 앱 내부 값이 공개돼 있지 않아 확인하지 못했으므로 정확한 값을 알 때만 바꾸세요. 목록에 없는 관문 이름과 빈 문자열 값은 무시합니다.
disable_dynapath
¶
True이면 DynaPath 토큰을 붙이지 않습니다. 이때 로그인 요청은 보내기 전에 KorailDynaPathRequiredError로 거절되므로 로그인이 필요한 메서드를 쓸 수 없습니다. 켜진 DynapathConfig와 함께 넘기면 ValueError가 발생합니다.
app_version
¶
공통 요청의 AppVersion 값입니다. 기존 Version과 별개이며, None이면 이전 SDK처럼 생략합니다.
DynapathRequestContext
¶
DynapathRequestContext(
method: str,
path: str,
url: str,
device: str,
version: str,
key: str,
user_agent: str,
device_name: str,
os_version: str,
)
DynaPath 토큰 공급자에게 전달할 요청 메타데이터를 담습니다.
DynapathTokenProvider
¶
DynapathTokenProvider = Callable[
[DynapathRequestContext], str | None
]
요청 정보(DynapathRequestContext)를 받아 DynaPath 토큰 문자열을 돌려주는 함수의 타입입니다. None을 돌려주면 헤더를 붙이지 않고, 함수가 예외를 발생시키면 요청을 보내지 않고 KorailProtocolError를 발생시킵니다.
DynapathTokenSettings
¶
DynapathTokenSettings(
device_id: str,
as_value: str,
app_start_ts: str,
os_version: str,
device_model: str,
app_id: str = KORAIL_DYNAPATH_APP_ID,
os_type: str = KORAIL_DYNAPATH_OS_TYPE,
sdk_version: str = KORAIL_DYNAPATH_SDK_VERSION,
table_index: int = DYNAPATH_TABLE_INDEX,
table: str = DYNAPATH_ENCODING_TABLE,
i8: int = DYNAPATH_DEFAULT_I8,
i9: int = DYNAPATH_DEFAULT_I9,
i10: int = DYNAPATH_DEFAULT_I10,
secure_user: bool = False,
debug: bool = False,
emulator: bool = False,
hooked: bool = False,
)
DynaPath 토큰 생성에 사용할 기기값과 시각 공급자를 구성합니다.
DynapathConfig
¶
DynapathConfig(
enabled: bool = False,
token_provider: DynapathTokenProvider | None = None,
token_settings: DynapathTokenSettings | None = None,
timestamp_ms_provider: TimestampMsProvider
| None = None,
random_text_provider: RandomTextProvider | None = None,
header_name: str = DYNAPATH_HEADER_NAME,
allowlist_paths: frozenset[
str
] = DYNAPATH_ALLOWLIST_PATHS,
device_name: str = KORAIL_DEFAULT_DEVICE_NAME,
os_version: str = KORAIL_DEFAULT_ANDROID_OS_RELEASE,
)
DynaPath 활성화 여부와 토큰 공급 방식을 구성합니다.
build_config_from_env
¶
build_config_from_env() -> KorailConfig
환경변수에서 실제 기기 값을 읽어 DynaPath를 켠 KorailConfig를 만듭니다.
KORAIL_DYNAPATH_DEVICE_ID, KORAIL_DYNAPATH_OS_VERSION, KORAIL_DYNAPATH_DEVICE_MODEL은 반드시 있어야 하며,
KORAIL_NETFUNNEL_USER_AGENT를 지정하지 않으면 KORAIL_ANDROID_BUILD_ID도 필요합니다. 기기 모델과 OS 버전은
DynaPath 토큰과 대기열 User-Agent에 함께 씁니다. 나머지 값은 KORAIL_BASE_URL, KORAIL_USER_AGENT,
KORAIL_DEVICE_WIDTH, KORAIL_DEVICE_HEIGHT, KORAIL_ANDROID_SDK_INT, KORAIL_DYNAPATH_AS_VALUE,
KORAIL_ADVERTISING_ID로 바꿀 수 있습니다. 로그인 정보나 카드 정보는 환경변수에서 읽지 않습니다.
필요한 환경변수가 없거나 빈 값이면 RuntimeError가 발생합니다. KORAIL_DEVICE_WIDTH, KORAIL_DEVICE_HEIGHT,
KORAIL_ANDROID_SDK_INT가 정수가 아니면 ValueError가 발생합니다.