114

I am pretty new to Python's urllib. What I need to do is set a custom HTTP header for the request being sent to the server.

Specifically, I need to set the Content-Type and Authorization HTTP headers. I have looked into the Python documentation, but I haven't been able to find it.

4 Answers 4

141

For both Python 3 and Python 2, this works:

try:
    from urllib.request import Request, urlopen  # Python 3
except ImportError:
    from urllib2 import Request, urlopen  # Python 2

req = Request('http://api.company.com/items/details?country=US&language=en')
req.add_header('apikey', 'xxx')
content = urlopen(req).read()

print(content)
Sign up to request clarification or add additional context in comments.

4 Comments

Can we do the same thing with requests q.add_header('apikey', 'xxx')
What do you mean, @user3378649?
@user3378649 may be you means use requests python package custom headers
THIS answer - a thousand times YES (thanks!). I have been struggling for hours trying to find a common interface for python 2 and 3 (between urllib, urllib2 and urllib3).
107

adding HTTP headers using urllib2:

from the docs:

import urllib2
req = urllib2.Request('http://www.example.com/')
req.add_header('Referer', 'http://www.python.org/')
resp = urllib2.urlopen(req)
content = resp.read()

Comments

22

Use urllib2 and create a Request object which you then hand to urlopen. http://docs.python.org/library/urllib2.html

I dont really use the "old" urllib anymore.

req = urllib2.Request("http://google.com", None, {'User-agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5'})
response = urllib2.urlopen(req).read()

untested....

Comments

1

For multiple headers do as follow:

import urllib2
req = urllib2.Request('http://www.example.com/')
req.add_header('param1', '212212')
req.add_header('param2', '12345678')
req.add_header('other_param1', 'sample')
req.add_header('other_param2', 'sample1111')
req.add_header('and_any_other_parame', 'testttt')
resp = urllib2.urlopen(req)
content = resp.read()

2 Comments

Do not do this, simply pass in a headers dictionary if you have multiple header fields to use.
guess you are right - but hey, this was 2015 for Python 2.7 Theses days - I'm populating a dictionary.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.