2012-01-18 15 views
8

HTTP要求を作成し、解析されていない未処理の応答(特にヘッダー)を取得する簡単な方法はありますか?生の解析されていないHTTP応答を取得する

+0

を正確にあなたがデータを受信し、よりユーザーフレンドリーな方法で行うことができないことをそれを行うことを望んでいますか? –

+1

サーバが応答で '\ r \ n 'の代わりに' \ n'を使用しているかどうかを確認したいと思います。 – Acorn

答えて

13

直接socketモジュールを使用する:

import socket 

CRLF = "\r\n" 

request = [ 
    "GET/HTTP/1.1", 
    "Host: www.example.com", 
    "Connection: Close", 
    "", 
    "", 
] 

# Connect to the server 
s = socket.socket() 
s.connect(('www.example.com', 80)) 

# Send an HTTP request 
s.send(CRLF.join(request)) 

# Get the response (in several parts, if necessary) 
response = '' 
buffer = s.recv(4096) 
while buffer: 
    response += buffer 
    buffer = s.recv(4096) 

# HTTP headers will be separated from the body by an empty line 
header_data, _, body = response.partition(CRLF + CRLF) 

print header_data 
HTTP/1.0 302 Found 
Location: http://www.iana.org/domains/example/ 
Server: BigIP 
Connection: Keep-Alive 
Content-Length: 0 
+0

うわー、完全に動作するソリューションをありがとう! HTTPSを使用する必要がある場合、これは非常に複雑になりますか? – Acorn

+0

ありがとう、ジェレミー - レスポンス分割を追加するためにもう一度ログインしました。あなたは私にそれを打ち負かしています:) –

+3

@Acorn:SSLをこのようにしたい場合は、sslモジュールをインパクトし、通常のソケットではなくSSLSocketです。私は自分でそれを使用していないので、他の違いがあるかもしれません。しかし、別のSOの質問のための良いトピックのような音:) –

関連する問題