私はpython mechanize libを使用しており、いくつかのURLでhttp PUTメソッドを使用しようとしていますが、これに対するオプションが見つかりません。GET メソッドと POST メソッドしか表示されません...
PUT メソッドが機能しない場合、誰かがこれを行うためのより良いライブラリを教えてくれるでしょうか?
私はpython mechanize libを使用しており、いくつかのURLでhttp PUTメソッドを使用しようとしていますが、これに対するオプションが見つかりません。GET メソッドと POST メソッドしか表示されません...
PUT メソッドが機能しない場合、誰かがこれを行うためのより良いライブラリを教えてくれるでしょうか?
考えられる解決策の 1 つ:
class PutRequest(mechanize.Request):
"Extend the mechanize Request class to allow a http PUT"
def get_method(self):
return "PUT"
次に、次のようなリクエストを行うときにこれを使用できます。
browser.open(PutRequest(url,data=your_encoded_params,headers=your_headers))
注: mechanize コード パッケージを掘り下げて、mechanize が HTTP メソッドを設定している場所を見つけることで、この解決策にたどり着きました。mechanize.Request
を呼び出すときに、Request クラスを使用し、その中で Request クラスを_request.py
拡張していることに気付きました_urllib2_fork.py
。http メソッドは、実際にget_method
は の Request クラスのに設定されてい_urllib2_fork.py
ます。GET および POST メソッドのみを許可していたことが判明get_method
しました。_urllib2_fork.py
この制限を乗り越えるために、mechanize を拡張する独自の put および delete クラスを作成することになりました。リクエストはオーバーロードget_method()
のみ。
使用リクエスト:
>>> import requests
>>> result = requests.put("http://httpbin.org/put", data='hello')
>>> result.text
ドキュメントごと:
requests.put(url, data=None, **kwargs)
Sends a PUT request. Returns Response object.
Parameters:
url – URL for the new Request object.
data – (optional) Dictionary or bytes to send in the body of the Request.
**kwargs – Optional arguments that request takes.
機械化経由:
import mechanize
import json
class PutRequest(mechanize.Request):
def get_method(self):
return 'PUT'
browser = mechanize.Browser()
browser.open(
PutRequest('http://example.com/',
data=json.dumps({'locale': 'en'}),
headers={'Content-Type': 'application/json'}))
http://qxf2.com/blog/python-mechanize-the-missing-manual/ (おそらく時代遅れ)も参照してください。
Key Zhuが言ったように、リクエストはより良い方法でそれを行います。