2012-01-18 15 views
8

¿Hay alguna forma directa de realizar una solicitud HTTP y obtener la respuesta sin analizar (específicamente los encabezados)?Obteniendo una respuesta HTTP sin procesar

+0

¿Qué es exactamente lo que esperas que ver con esto que no se puede hacer con las maneras más fáciles de usar a la recepción de los datos? –

+1

Quiero ver si el servidor está usando '\ n' en lugar de' \ r \ n' en sus respuestas. – Acorn

Respuesta

13

Con el módulo de socket directamente:

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

¡Guau, gracias por la solución totalmente funcional! ¿Esto se vuelve mucho más complicado si necesita usar HTTPS? – Acorn

+0

Gracias, Jeremy - Acabo de iniciar sesión nuevamente para agregar la división de respuestas, y me ganaste :) –

+3

@Acorn: si quieres hacer SSL de esta manera, necesitarás importar el módulo ssl, y usar un SSLSocket en lugar de un socket regular. No lo he usado yo mismo, entonces puede haber otras diferencias. Suena como un buen tema para otra pregunta de SO, sin embargo :) –

Cuestiones relacionadas