2012-01-18 16 views
8

Czy istnieją proste sposoby na wysłanie żądania HTTP i uzyskanie nieprzetworzonej odpowiedzi (w szczególności nagłówków)?Uzyskiwanie nieprzetworzonej, nieprzetworzonej odpowiedzi HTTP

+0

Co dokładnie masz nadzieję zrobić z tym, że nie można zrobić z bardziej przyjazny dla użytkownika sposób, po otrzymaniu danych? –

+1

Chcę sprawdzić, czy serwer używa w swoich odpowiedziach '\ n' zamiast' \ r \ n'. – Acorn

Odpowiedz

13

Korzystanie z modułu socket bezpośrednio:

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

Wow, dzięki za w pełni działające rozwiązanie! Czy korzystanie z HTTPS staje się znacznie bardziej skomplikowane? – Acorn

+0

Dzięki, Jeremy - Właśnie zalogowałem się ponownie, aby dodać dzielenie odpowiedzi, a ty mnie do tego zbiłeś :) –

+3

@Acorn: Jeśli chcesz używać SSL w ten sposób, będziesz musiał imporować moduł ssl i użyć SSLSocket zamiast zwykłego gniazda. Nie używałem go sam, więc mogą istnieć inne różnice. Brzmi jak dobry temat na kolejne pytanie SO, choć :) –

Powiązane problemy