PUT
PythonでHTTPを使用してサーバーにデータをアップロードする必要があります。urllib2のドキュメントを簡単に読んだところ、HTTPのみが実行されますPOST
。PUT
PythonでHTTPを実行する方法はありますか?
14 に答える
import urllib2
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request('http://example.org', data='your_put_data')
request.add_header('Content-Type', 'your/contenttype')
request.get_method = lambda: 'PUT'
url = opener.open(request)
Httplib はよりクリーンな選択のようです。
import httplib
connection = httplib.HTTPConnection('1.2.3.4:1234')
body_content = 'BODY CONTENT GOES HERE'
connection.request('PUT', '/url/path/to/put/to', body_content)
result = connection.getresponse()
# Now result.status and result.reason contains interesting stuff
requests ライブラリを使用できます。urllib2 アプローチを採用する場合と比較して、物事が大幅に簡素化されます。最初にpipからインストールします:
pip install requests
リクエストのインストールの詳細。
次に、put リクエストをセットアップします。
import requests
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
# Create your header as required
headers = {"content-type": "application/json", "Authorization": "<auth-key>" }
r = requests.put(url, data=json.dumps(payload), headers=headers)
requests ライブラリのクイックスタートを参照してください。これは urllib2 よりもずっと簡単だと思いますが、この追加パッケージをインストールしてインポートする必要があります。
httplibモジュールを確認する必要があります。必要な種類のHTTPリクエストを作成できるようにする必要があります。
RESTful API のクライアントとして機能するために、この問題も解決する必要がありました。GET と POST に加えて PUT と DELETE を送信できるため、httplib2 に落ち着きました。Httplib2 は標準ライブラリの一部ではありませんが、チーズ ショップから簡単に入手できます。
Joe Gregario によるhttplib2もお勧めします。標準ライブラリの httplib の代わりにこれを定期的に使用しています。
put.pyをご覧になりましたか?私は過去にそれを使用しました。urllibを使用して独自のリクエストをハックすることもできます。
もちろん、ソケットからurllibの微調整まで、あらゆるレベルの既存の標準ライブラリを使用して独自のロールを作成できます。
http://pycurl.sourceforge.net/
「PyCurlはlibcurlへのPythonインターフェースです。」
「libcurlは無料で使いやすいクライアント側のURL転送ライブラリです。...HTTPPUTをサポートしています。」
「PycURLの主な欠点は、これらの優れたPythonicクラス階層がないlibcurlの比較的薄いレイヤーであるということです。これは、libcurlのC APIに精通していない限り、学習曲線がやや急になることを意味します。」
使用できますrequests.request
import requests
url = "https://www.example/com/some/url/"
payload="{\"param1\": 1, \"param1\": 2}"
headers = {
'Authorization': '....',
'Content-Type': 'application/json'
}
response = requests.request("PUT", url, headers=headers, data=payload)
print(response.text)
使用するurllib3
これを行うには、URL でクエリ パラメーターを手動でエンコードする必要があります。
>>> import urllib3
>>> http = urllib3.PoolManager()
>>> from urllib.parse import urlencode
>>> encoded_args = urlencode({"name":"Zion","salary":"1123","age":"23"})
>>> url = 'http://dummy.restapiexample.com/api/v1/update/15410' + encoded_args
>>> r = http.request('PUT', url)
>>> import json
>>> json.loads(r.data.decode('utf-8'))
{'status': 'success', 'data': [], 'message': 'Successfully! Record has been updated.'}
使用するrequests
>>> import requests
>>> r = requests.put('https://httpbin.org/put', data = {'key':'value'})
>>> r.status_code
200