2012-01-18 103 views
0

如何獲取對HTTPS請求的完全未解析響應?獲取對HTTPS GET請求的原始未解析響應

是否有任何HTTP庫會允許您獲取原始響應,或者是使用套接字手動構建請求的唯一方法?

我特別想看看服務器發送了什麼換行符。

+0

[用套接字創建原始HTTP請求]的可能的重複(http://stackoverflow.com/questions/5755507/creating-a-raw-http-request-with-sockets) – katrielalex 2012-01-18 23:36:55

回答

1

Example from the docs

import socket, ssl, pprint 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# require a certificate from the server 
ssl_sock = ssl.wrap_socket(s, 
          # http://curl.haxx.se/ca/cacert.pem 
          ca_certs="cacert.pem", 
          cert_reqs=ssl.CERT_REQUIRED) 

ssl_sock.connect(('www.verisign.com', 443)) 

print repr(ssl_sock.getpeername()) 
print ssl_sock.cipher() 
print pprint.pformat(ssl_sock.getpeercert()) 

# Set a simple HTTP request -- use httplib in actual code. 
ssl_sock.write("""GET/HTTP/1.0\r 
Host: www.verisign.com\r\n\r\n""") 

# Read a chunk of data. Will not necessarily 
# read all the data returned by the server. 
data = ssl_sock.read() 
print repr(data)[:79] 

# note that closing the SSLSocket will also close the underlying socket 
ssl_sock.close() 

輸出

(ip, 443) 
('DHE-RSA-AES256-SHA', 'TLSv1/SSLv3', 256) 
{'notAfter': 'May 25 23:59:59 2012 GMT', 
'subject': ((('1.3.6.1.4.1.311.60.2.1.3', u'US'),), 
      (('1.3.6.1.4.1.311.60.2.1.2', u'Delaware'),), 
      (('businessCategory', u'V1.0, Clause 5.(b)'),), 
      (('serialNumber', u'2497886'),), 
      (('countryName', u'US'),), 
      (('postalCode', u'94043'),), 
      (('stateOrProvinceName', u'California'),), 
      (('localityName', u'Mountain View'),), 
      (('streetAddress', u'487 East Middlefield Road'),), 
      (('organizationName', u'VeriSign, Inc.'),), 
      (('organizationalUnitName', u' Production Security Services'),), 
      (('commonName', u'www.verisign.com'),))} 
'HTTP/1.1 200 OK\r\nDate: Thu, 19 Jan 2012 01:47:31 GMT\r\nServer: Apache\r\nSe 

Example with M2Crypto

+0

@Acorn:代碼有效。我已經用[cacert.pem](http://curl.haxx.se/ca/cacert.pem)對它進行了測試。 – jfs 2012-01-19 01:43:59

+0

@Acorn:我已將示例輸出添加到答案中。 – jfs 2012-01-19 01:57:03

0

這取決於你將要對結果做什麼。 httplib.HTTPSConnectionset_debuglevel方法,它允許將響應數據打印到stdout(雖然每行都有前綴)。出於調試的目的,這正是我所需要的。不知道,這是你需要的。