2010-05-28 4 views

답변

4

아마도 가장 쉬운 곳은 makefile()을 사용하여 소켓에 대한 더 간단한 파일과 유사한 인터페이스를 얻는 것입니다.

import socket, base64 

host= 'www.example.com' 
path= '/' 
username= 'fred' 
password= 'bloggs' 
token= base64.encodestring('%s:%s' % (username, password)).strip() 

lines= [ 
    'GET %s HTTP/1.1' % path, 
    'Host: %s' % host, 
    'Authorization: Basic %s' % token, 
    'Connection: close', 
] 

s= socket.socket() 
s.connect((host, 80)) 
f= s.makefile('rwb', bufsize=0) 
f.write('\r\n'.join(lines)+'\r\n\r\n') 
response= f.read() 
f.close() 
s.close() 

당신은 당신이 HTML 또는 인증 필수 헤더를 골라 반환 된 응답을 해석해야하는 경우 많은에게보다 더 많은 일을해야하고, 그 리디렉션, 오류, 전송 인코딩 및 모든 처리 할게 권리. HTTP는 복잡 할 수 있습니다! 저수준 소켓을 사용해야합니까?

2

예. urllib의 sources에서 특히 http_error_401 함수 (물론 그 주위를 파견하는 것) : HTTP 요청을 만들고, 401 응답을보고, 해당 영역을 추출하고, 해당 체계가 basic인지 확인하고, 해당 영역에 대한 사용자 및 암호로 다시 시도하십시오 (동일한 소스 파일에 cf34 함수 retry_http_basic_auth). 당연히 많은 일들이 필요하지만, 그것은 당신이 필요로하는 것처럼 "베어 메탈에 이르기까지"프로그래밍의 대가입니다.

관련 문제