CONNECT 요청에서 프록시 쿠키 유지하기
대상 쿠키를 프록시 인증으로 취급하는 대신 공급업체가 정의한 CONNECT 로그인에는 libcurl의 별도 프록시 헤더 인터페이스를 사용하십시오.
일부 프록시 제품은 이후 프록시 요청을 위한 쿠키나 토큰을 제공하는 로그인 흐름을 정의합니다. 해당 토큰이 CONNECT에 나타나야 한다면 터널 내부 웹사이트용 쿠키와 분리해 두십시오.
libcurl은 프록시용 전용 사용자 지정 헤더 목록을 제공합니다. 이미 초기화된 C 애플리케이션에서 구성 조각은 다음과 같을 수 있습니다.
struct curl_slist *proxy_headers = NULL;
proxy_headers = curl_slist_append(proxy_headers,
"Cookie: ProxySession=REPLACE_WITH_PROXY_TOKEN");
curl_easy_setopt(handle, CURLOPT_PROXYHEADER, proxy_headers);
curl_easy_setopt(handle, CURLOPT_HEADEROPT,
(long) CURLHEADER_SEPARATE);이것은 프록시의 문서화된 로그인 프로토콜이 해당 헤더를 요구할 때만 적절합니다. 주변 코드에서 할당과 옵션 결과를 확인하고, 전송이 완료될 때까지 목록을 유지한 다음 목록을 해제하기 전에 핸들의 포인터를 지우거나 교체하십시오.
헤더를 분리해 처리하면 libcurl은 CONNECT에서 프록시 목록을, 설정된 터널 내부 요청에서 대상 목록을 보냅니다. 따라서 프록시는 공급업체 토큰을 받지만 그 토큰이 웹사이트 쿠키가 되지는 않습니다. 이 분리는 libcurl 7.42.1부터 기본값입니다. 명시적 옵션은 의도된 동작을 눈에 보이게 합니다.
브라우저 쿠키 저장소는 다른 메커니즘입니다
libcurl의 쿠키 엔진을 활성화하거나 대상에 쿠키를 설정한다고 해서 브라우저 고유의 프록시 로그인 흐름이 자동으로 재현되지는 않습니다. CONNECT는 대상과의 HTTPS 교환 전에 발생합니다. 캡처한 사이트 쿠키를 모든 요청에 복사하는 대신 제품의 실제 요구 사항을 파악하십시오.
프록시가 표준 HTTP 프록시 인증을 사용한다면 대신 libcurl의 프록시 자격 증명과 지원되는 인증 옵션을 사용하십시오. Proxy-Authenticate가 있는 407은 세션 토큰을 반환하는 HTML 로그인 페이지와 다른 프로토콜입니다.
토큰은 해당 프록시 엔드포인트와 의도된 수명으로 제한하십시오. 다른 중개자로 전환할 때는 그 구성 변경의 일부로 헤더 목록을 교체하십시오. 일반 요청 헤더 목록은 하나의 프록시에만 속한 비밀을 두기에 나쁜 위치입니다.