2009-11-10 4 views
1

파이썬을 사용하여 다이제스트 인증을 사용하는 사용자 정의 http 서버에 연결하는 클라이언트를 작성하려고합니다. 문제없이 첫 번째 요청을 연결하고 풀 수 있습니다. TCPDUMP 사용 (MAC OS X에서 - 나는 MAC과 파이썬 놈이다.) RFC2617에 익숙하다면 첫 번째 요청은 실제로 두 개의 HTTP 요청임을 알 수있다. 401의 첫 번째 결과는 변경되지 않았습니다. 서버에서 다시 보낸 헤더 정보는 200 OK 응답과 페이로드를 산출하는 몇 가지 사용자 지정 권한 부여 헤더 값을 사용하여 두 번째 요청에 대한 헤더를 생성하는 데 올바르게 사용됩니다.클라이언트 다이제스트 인증 URLLIB2가있는 Python이 인증 헤더 정보를 기억하지 않습니다.

모든 것이 훌륭합니다. urllib2 덕택에 내 HTTPDigestAuthHandler 오프너가 작동합니다.

동일한 프로그램에서 동일한 서버에서 두 번째 다른 페이지를 요청합니다. RFC에 따르면, TCPDUMP는 거의 동일한 권한 헤더 정보 (nc가 증가해야 함)를 사용하여 이번에는 하나의 요청 만 표시 할 것으로 예상합니다.

대신 그것이 다이제스트 인증 후속 요청을 가질 urllib2가 가능 인 200

에 필요한 정보가 처음부터 시작하고, 첫 번째 (401)를 취득 재생성 공지 인증 헤더 값을 재활용 하나 개의 요청 만 할 ?

는 구글이 내가없는 것 같아요 놀라 울 정도로 작은 나왔고

[이 의미가 될 때까지 몇 번 것을 다시 읽어, 나는 그것이 더 이상 일반 만드는 방법을 모르겠습니다]. 나는 urllib2.py의 코드와 그 정말 엉망인 코드 ("이것은 엄청난 노력이 아니다")을 보았습니다. 그래서 이것이 버그라면 나는 놀라지 않을 것입니다. 내 Connection Header가 Closed이고 Keepalive로 설정해도 덮어 쓴다는 것을 알았습니다. 그게 나를 keepalive.py로 이끌었지 만 그것은 나에게도 도움이되지 못했습니다.

Pycurl도 작동하지 않습니다.

전 상호 작용 코드를 제공 할 수 있지만 가능한 경우 기존 라이브러리를 다시보고 싶습니다.

요약하면 urllib2 및 다이제스트 인증을 사용하면 동일한 서버에서 2 개의 페이지를 가져올 수 있습니다 (첫 페이지 2 개, 초당 1 개).

이전에 시도한 결과 이미 알고 있지 않은 경우 알려 주시기 바랍니다. 당신이 대안이 있다면 나는 모든 귀입니다.

미리 감사드립니다.

답변

1

아직 구입할 수 없지만 urllib2은 직접 추가 할 수있는 유연성이 있습니다. 하위 클래스 HTTPDigestAuthHandler, 해킹 (retry_http_digest_auth 방법) 인증 정보를 기억하고 모든 후속 요청 (WWW-Authenticate 헤더 추가)에 사용하기 위해 http_request(self, request) 메서드를 정의하십시오.