web-dev-qa-db-ja.com

urllib2を使用してURLをリクエストすると、「HTTPエラー405:メソッドが許可されていません」というメッセージが表示されるのはなぜですか。

私はPythonでurllib2とurllibライブラリを使用しています

私が次のコードを持っていたとしましょう

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

上記のコードを実行すると、次のエラーが発生します

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

ここで何が起こっているのか、なぜ機能しないのかを誰かに教えてもらえますか

前もって感謝します............

呼び出しているサーバーは、呼び出しようとしているURLに対してPOSTメソッドが許可されていないことを通知しています。

URLのパス部分をRequestオブジェクトデータパラメータとして渡すことにより、これをGETではなくPOSTにします。

代わりにGETリクエストを送信したいと思います。

req = urllib2.Request(url + half_url.encode('utf-8'))
15
Martijn Pieters