¿Cómo enviar una solicitud HTTP / 1.0 a través de urllib2?

Parece que urllib2 envía solicitud HTTP / 1.1 por defecto?

urllib2 usa httplib debajo del capó para hacer la conexión. Puede cambiarlo a http 1.0 como se muestra a continuación. He incluido el registro de acceso de mis servidores apache para mostrar cómo la conexión http ha cambiado a 1.0

código

import urllib2, httplib httplib.HTTPConnection._http_vsn = 10 httplib.HTTPConnection._http_vsn_str = 'HTTP/1.0' print urllib2.urlopen('http://localhost/').read() 

access.log

 127.0.0.1 - - [01/Dec/2012:09:10:27 +0300] "GET / HTTP/1.1" 200 454 "-" "Python-urllib/2.7" 127.0.0.1 - - [01/Dec/2012:09:16:32 +0300] "GET / HTTP/1.0" 200 454 "-" "Python-urllib/2.7" 

Para evitar el parche de mono httplib (cambio global), puede HTTPConnection subclase HTTPConnection y definir su propio controlador de http:

 #!/usr/bin/env python try: from httplib import HTTPConnection from urllib2 import HTTPHandler, build_opener except ImportError: # Python 3 from http.client import HTTPConnection from urllib.request import HTTPHandler, build_opener class HTTP10Connection(HTTPConnection): _http_vsn = 10 _http_vsn_str = "HTTP/1.0" class HTTP10Handler(HTTPHandler): def http_open(self, req): return self.do_open(HTTP10Connection, req) opener = build_opener(HTTP10Handler) print(opener.open('http://stackoverflow.com/q/13656757').read()[:100])