2012-10-22 27 views
5

Sto utilizzando la libreria Richieste python per fare roba relativa a HTTP. Ho impostato un server proxy utilizzando ntlmaps gratuiti sul mio computer per fungere da proxy per rispondere alle sfide NTLM dal server ISA aziendale. Tuttavia, la risposta sembra essere sempre vuota, come mostrato di seguito:Supporto proxy https nella libreria di richieste python

>>> import requests 
>>> r = requests.get('https://www.google.com') 
>>> r.text 
u'<HTML></HTML>\r\n' 

Tuttavia, non vi è alcun problema nella richiesta http. E, quando sto usando la libreria urllib2, può ottenere la risposta corretta. Ho confrontato la differenza di messaggio tra l'uso di "Richieste" e la libreria "urllib2", e ho scoperto che "Richieste" utilizza "GET" mentre "urllib2" utilizza "CONNECT", come mostrato nel messaggio grezzo sottostante acquisito (la prima è la libreria "Richieste")). Qualcuno sa se c'è qualche soluzione? È un bug della libreria 'Richieste'? Grazie in anticipo.

22.10.2012 11:01:41 Version 0.9.9.0.1 
*** Got client request header. 
*** Client header: 
===== 
GET https://www.google.com/ HTTP/1.1 
Host: www.google.com 
Proxy-Connection: Keep-Alive 
Accept-Encoding: gzip, deflate, compress 
Accept: */* 
User-Agent: python-requests/0.14.1 CPython/2.7.2 Darwin/12.1.0 

*** Client request header does not have 'Content-Length' or 'Transfer-Encoding' parameter and it must not have any body. 
*** Replacing values in client header...Done. 
*** New client header: 
===== 
GET https://www.google.com/ HTTP/1.1 
Host: www.google.com 
Proxy-Connection: Keep-Alive 
Accept-Encoding: gzip, deflate, compress 
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */* 
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) 

*** Connecting to remote server...(10.220.15.36:9000)...Done. 
*** Sending client request header to remote server...Done. 
*** Got remote server response header. 
*** Remote server header: 
===== 
HTTP/1.0 200 OK 
Content-Type: text/html 
Refresh: 0; URL=https://www.google.com/ 

*** Could not find server 'Content-Length' parameter. 
*** Authentication routine started. 
*** Authentication not required. 
*** Authentication routine finished. 
*** Sending remote server response header to client...Done. 
*** Sent 15 bytes to client. (all - 0, len - 0) 
*** Remote server closed connection. (Server buffer - 0 bytes) 
*** No server's data to send to the client. (server's buffer - 0 bytes) 
*** Termination conditions detected (remote server closed connection). Stop Request issued. 
*** Finishing procedure started. 
*** Closing thread...Done. 

Il messaggio inviato dalla biblioteca 'urllib2':

22.10.2012 11:03:49 Version 0.9.9.0.1 
*** Got client request header. 
*** Client header: 
===== 
CONNECT www.google.com:443 HTTP/1.0 

*** Client request header does not have 'Content-Length' or 'Transfer-Encoding' parameter and it must not have any body. 
*** Replacing values in client header...Done. 
*** New client header: 
===== 
CONNECT www.google.com:443 HTTP/1.0 
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */* 
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) 

*** Connecting to remote server...(10.220.15.36:9000)...Done. 
*** Sending client request header to remote server...Done. 
*** Got remote server response header. 
*** Remote server header: 
===== 
HTTP/1.1 407 Proxy Authentication Required (The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied.) 
Via: 1.1 LASISA2 
Proxy-Authenticate: Negotiate 
Proxy-Authenticate: Kerberos 
Proxy-Authenticate: NTLM 
Connection: close 
Proxy-Connection: close 
Pragma: no-cache 
Cache-Control: no-cache 
Content-Type: text/html 
Content-Length: 718 

*** Server 'Content-Length' found to be 718. 
*** Authentication routine started. 
*** Got Error 407 - "Proxy authentication required". 
*** Authentication methods allowed: Negotiate, Kerberos, NTLM 
*** Using NTLM authentication method. 
*** Authorization in progress... 
*** Closing connection to the remote server...Done. 
*** Building environment for NTLM. 
*** Using custom NTLM flags: 06820000 
*** NTLM version with LM response only. 
*** NTLM Domain/Host/User: IGTMASTER/BEATLES.LOCAL/TFSBVTVA 
*** NTLM hashed passwords found. 
*** Environment has been built successfully. 
*** Connecting to remote server...(10.220.15.36:9000)...Done. 
*** Resetting remote server status...Done. (Server buffer - 651 bytes) 
*** Remote server buffer flushed. 
*** Fake NTLM header with Msg1: 
===== 
CONNECT www.google.com:443 HTTP/1.0 
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */* 
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) 
Proxy-Connection: Keep-Alive 
Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAA 

*** Sending Fake NTLM header with Msg1...Done. 
*** There must be no body to send. 
*** Waiting for message 2 from remote server... 
*** Got remote server response header. 
*** Remote server header: 
===== 
HTTP/1.1 407 Proxy Authentication Required (Access is denied.) 
Via: 1.1 LASISA2 
Proxy-Authenticate: NTLM TlRMTVNTUAACAAAACQAJADgAAAAGgoECnmQdttSFW6oAAAAAAAAAAJAAkABBAAAABQLODgAAAA9JR1RNQVNURVICABIASQBHAFQATQBBAFMAVABFAFIAAQAOAEwAQQBTAEkAUwBBADIABAAaAGkAcwAuAGEAZAAuAGkAZwB0AC4AYwBvAG0AAwAqAGwAYQBzAGkAcwBhADIALgBpAHMALgBhAGQALgBpAGcAdAAuAGMAbwBtAAUAFABhAGQALgBpAGcAdAAuAGMAbwBtAAAAAAA= 
Connection: Keep-Alive 
Proxy-Connection: Keep-Alive 
Pragma: no-cache 
Cache-Control: no-cache 
Content-Type: text/html 
Content-Length: 0 

*** Server 'Content-Length' found to be 0. 
*** Got NTLM message 2 from remote server. 
*** Resetting remote server status...Done. (Server buffer - 0 bytes) 
*** Remote server buffer flushed. 
*** Sending Fake NTLM header (not body) with Msg3...Done. 
*** Fake NTLM header with Msg3: 
===== 
CONNECT www.google.com:443 HTTP/1.0 
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */* 
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) 
Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAF4AAAAAAAAAdgAAAAkACQBAAAAACAAIAEkAAAANAA0AUQAAAAAAAAB2AAAABoIAAElHVE1BU1RFUlRGU0JWVFZBQkVBVExFUy5MT0NBTMwaDvCTdLkOsE7vD6Tog1RoolpOLnh4WQ== 

*** End of NTLM authorization process. 
*** Authentication routine finished. 
*** Got remote server response header. 
*** Remote server header: 
===== 
HTTP/1.1 200 Connection established 
Proxy-Connection: close 
Connection: close 
Via: 1.1 LASISA2 

*** Remote server response to the 'CONNECT' request. It must not have any body. 
*** Authentication routine started. 
*** Authentication not required. 
*** Authentication routine finished. 
*** Sending remote server response header to client...Done. 
*** Lowered authentication flags down. As the code is neither 401 nor 407. 
*** Successful 'CONNECT' request detected. Going to tunnel mode. 
*** Resetting client status...Done. (Client buffer - 114 bytes) 
*** Resetting remote server status...Done. (Server buffer - 0 bytes) 
*** Request completed. 
*** Tunnelled 114 bytes to remote server. 
*** Tunnelled 1725 bytes to client. 
*** Tunnelled 186 bytes to remote server. 
*** Tunnelled 47 bytes to client. 
*** Tunnelled 142 bytes to remote server. 
*** Tunnelled 4096 bytes to client. 
*** Tunnelled 248 bytes to client. 
*** Tunnelled 2076 bytes to client. 
*** Tunnelled 4096 bytes to client. 
*** Tunnelled 1198 bytes to client. 
*** Remote server closed connection. (Server buffer - 0 bytes) 
*** Termination conditions detected (remote server closed connection). Stop Request issued. 
*** Finishing procedure started. 
*** Closing thread...Done. 

risposta

1

https delega dovrebbe usare "CONNECT" E 'intenzionale che urllib2 lo fa in questo modo. CONNECT stabilisce il tunnel per la trasmissione sicura richiesta per HTTPS.

+0

Grazie. Quindi pensi che questo sia un bug della libreria Requests? Se sì, potrei aver bisogno di farlo sapere allo sviluppatore. – EricCui

0

Come ho capito, questo è un bug in urllib3 che richiede l'uso sotto il cofano. Vedi questa segnalazione di bug: https://github.com/shazow/urllib3/issues/50

+0

Grazie. Ho inviato il problema allo sviluppatore Requests. Vedere questo link: https://github.com/kennethreitz/requests/issues/905 – EricCui

+0

Sono abbastanza sicuro che siano già a conoscenza, e lavorando sul problema :) – aychedee

+0

Il bug è stato corretto, e i proxy https stanno lavorando da versione 2.0.0+ che è stata rilasciata :) – jpoppe

Problemi correlati