Making HTTP HEAD request with urllib2 from Python 2
Question: 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.MyHTTPRedirectHandler(), misc_urllib2.HeadRequest()])
    

with `misc_urllib2.py` containing

    
    
    class HeadRequest(urllib2.Request):
        def get_method(self):
            return "HEAD"
    
    
    class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler):
        def __init__ (self):
            self.redirects = []
    
        def http_error_301(self, req, fp, code, msg, headers):  
            result = urllib2.HTTPRedirectHandler.http_error_301(
                    self, req, fp, code, msg, headers)
            result.redirect_code = code
            return result
    
        http_error_302 = http_error_303 = http_error_307 = http_error_301
    

But I am getting

    
    
    TypeError: __init__() takes at least 2 arguments (1 given)
    

If I just do

    
    
    opender = urllib2.build_opener(misc_urllib2.MyHTTPRedirectHandler())
    

then it works fine


Answer: 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](https://github.com/httplib2/httplib2)

    
    
    import httplib2
    h = httplib2.Http()
    resp = h.request("http://www.google.com", 'HEAD')
    

