콘텐츠로 이동

설정

클라이언트 설정과 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 요청을 보낼지와 언제 보낼지를 그 서버가 정합니다. 신뢰할 수 있는 주소가 아니면 바꾸지 마세요.

user_agent

user_agent: str = KORAIL_API_USER_AGENT

API 요청의 User-Agent 헤더입니다.

netfunnel_user_agent

netfunnel_user_agent: str = KORAIL_USER_AGENT

대기열 요청의 User-Agent 헤더입니다. 앱의 대기열 요청은 안드로이드 기본 User-Agent(Dalvik/2.1.0 (...))를 쓰므로 기본값도 이 형식입니다. DynaPath 기기값을 바꾸면 이 값의 안드로이드 버전·기기 모델도 같게 맞추세요. build_config_from_env로 만든 설정은 기본적으로 두 값에 같은 기기값을 씁니다.

netfunnel_enabled

netfunnel_enabled: bool = True

대기열을 거칠지 정합니다. 기본값은 True입니다. False이면 대기열 없이 모든 요청을 바로 보내므로 앱과 다르게 동작합니다.

lang

lang: str | None = None

요청의 언어 필드(lang)입니다. None이면 보내지 않습니다. 앱이 보내는 값은 앱 내부 값이 공개돼 있지 않아 확인하지 못했습니다.

netfunnel_wait_limit

netfunnel_wait_limit: float | None = None

대기열에서 기다릴 누적 시간의 상한(초)입니다. None이면 제한하지 않습니다. 상한을 넘으면 API 요청을 보내지 않고 KorailNetFunnelError를 발생시킵니다.

netfunnel_actions

netfunnel_actions: Mapping[str, str] | None = None

관문별 대기열 식별값을 바꿉니다. 관문 이름(inquiry, peak_season_inquiry, product_inquiry, reserve, pay, reservation_view)을 키로, 보낼 식별값을 값으로 받습니다. 기본 식별값은 앱 내부 값이 공개돼 있지 않아 확인하지 못했으므로 정확한 값을 알 때만 바꾸세요. 목록에 없는 관문 이름과 빈 문자열 값은 무시합니다.

disable_dynapath

disable_dynapath: bool = False

True이면 DynaPath 토큰을 붙이지 않습니다. 이때 로그인 요청은 보내기 전에 KorailDynaPathRequiredError로 거절되므로 로그인이 필요한 메서드를 쓸 수 없습니다. 켜진 DynapathConfig와 함께 넘기면 ValueError가 발생합니다.

app_version

app_version: str | None = KORAIL_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가 발생합니다.