How to send HTTP/1.0 request via urllib2?

后端 未结 2 1734
傲寒
傲寒 2020-12-06 19:13

Seems that urllib2 sends HTTP/1.1 request by default?

相关标签:
2条回答
  • 2020-12-06 19:33

    To avoid monkey-patching httplib (global change), you could subclass HTTPConnection and define your own http handler:

    #!/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])
    
    0 讨论(0)
  • 2020-12-06 19:44

    urllib2 uses httplib under the hood to make the connection. You can change it to http 1.0 as shown below. I've included my apache servers access log to show how the http connection have change to 1.0

    code

    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"
    
    0 讨论(0)
提交回复
热议问题