Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why am I getting “HTTP Error 405: Method Not Allowed” when requesting a URL using urllib2?

I am using urllib2 and urllib libraries in python

suppose i had the following code

import urllib2
import urllib

url = 'http://ah.example.com'
half_url = u'/servlet/av/jd?ai=782&ji=2624743&sn=I'

req = urllib2.Request(url, half_url.encode('utf-8'))
response = urllib2.urlopen(req)
print response

when i run the above code i am getting the following error

Traceback (most recent call last):
  File "example.py", line 39, in <module>
    response = urllib2.urlopen(req)
  File "/usr/lib64/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib64/python2.7/urllib2.py", line 398, in open
    response = meth(req, response)
  File "/usr/lib64/python2.7/urllib2.py", line 511, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib64/python2.7/urllib2.py", line 436, in error
    return self._call_chain(*args)
  File "/usr/lib64/python2.7/urllib2.py", line 370, in _call_chain
    result = func(*args)
  File "/usr/lib64/python2.7/urllib2.py", line 519, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 405: Method Not Allowed

can anyone let me know whats happening here and why its not working

Thanks in advance............

like image 516
Shiva Krishna Bavandla Avatar asked Jul 12 '12 13:07

Shiva Krishna Bavandla


1 Answers

The server you are calling is telling you that the POST method is not allowed for the URL you are trying to call.

By passing in the path portion of your URL as the Request object data parameter you are making this a POST instead of a GET.

I suspect you wanted to send a GET request instead:

req = urllib2.Request(url + half_url.encode('utf-8'))
like image 162
Martijn Pieters Avatar answered Oct 21 '22 09:10

Martijn Pieters