Making HTTP HEAD request with urllib2 from Python 2

后端 未结 4 1401
无人共我
无人共我 2020-11-27 18:51

I\'m trying to do a HEAD request of a page using Python 2.

I am trying

import misc_urllib2
.....
opender = urllib2.build_opener([misc_urllib2.MyHTTPR         


        
相关标签:
4条回答
  • 2020-11-27 19:02

    This works just fine:

    import urllib2
    request = urllib2.Request('http://localhost:8080')
    request.get_method = lambda : 'HEAD'
    
    response = urllib2.urlopen(request)
    print response.info()
    

    Tested with quick and dirty HTTPd hacked in python:

    Server: BaseHTTP/0.3 Python/2.6.6
    Date: Sun, 12 Dec 2010 11:52:33 GMT
    Content-type: text/html
    X-REQUEST_METHOD: HEAD
    

    I've added a custom header field X-REQUEST_METHOD to show it works :)

    Here is HTTPd log:

    Sun Dec 12 12:52:28 2010 Server Starts - localhost:8080
    localhost.localdomain - - [12/Dec/2010 12:52:33] "HEAD / HTTP/1.1" 200 -
    

    Edit: there is also httplib2

    import httplib2
    h = httplib2.Http()
    resp = h.request("http://www.google.com", 'HEAD')
    
    0 讨论(0)
  • 2020-11-27 19:12

    The problem lies with your class HeadRequest, which inherits from urllib2.Request. According to doc, urllib2.Request.__init__ signature is

     __init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False) 
    

    so you must pass an url argument to it. In your second try, you just do not use HeadRequest, this is why it works.

    0 讨论(0)
  • 2020-11-27 19:20

    Try httplib

    >>> import httplib
    >>> conn = httplib.HTTPConnection("www.google.com")
    >>> conn.request("HEAD", "/index.html")
    >>> res = conn.getresponse()
    >>> print res.status, res.reason
    200 OK
    >>> print res.getheaders()
    [('content-length', '0'), ('expires', '-1'), ('server', 'gws'), ('cache-control', 'private, max-age=0'), ('date', 'Sat, 20 Sep 2008 06:43:36 GMT'), ('content-type', 'text/html; charset=ISO-8859-1')]
    

    See How do you send a HEAD HTTP request in Python 2?

    0 讨论(0)
  • 2020-11-27 19:21

    you shoud not add HeadRequest to build_opener or add_handler it should be called like this

    opener = urllib2.build_opener(MyHTTPRedirectHandler)
    response = opener.open(HeadRequest(url))
    print response.getheaders()
    
    0 讨论(0)
提交回复
热议问题