224

PUTPythonでHTTPを使用してサーバーにデータをアップロードする必要があります。urllib2のドキュメントを簡単に読んだところ、HTTPのみが実行されますPOSTPUTPythonでHTTPを実行する方法はありますか?

4

14 に答える 14

246
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)
于 2008-09-21T20:24:21.773 に答える
46

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
于 2010-10-12T22:13:42.017 に答える
11

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 よりもずっと簡単だと思いますが、この追加パッケージをインストールしてインポートする必要があります。

于 2014-09-25T18:08:52.143 に答える
8

httplibモジュールを確認する必要があります。必要な種類のHTTPリクエストを作成できるようにする必要があります。

于 2008-09-21T20:18:57.997 に答える
8

RESTful API のクライアントとして機能するために、この問題も解決する必要がありました。GET と POST に加えて PUT と DELETE を送信できるため、httplib2 に落ち着きました。Httplib2 は標準ライブラリの一部ではありませんが、チーズ ショップから簡単に入手できます。

于 2008-09-22T12:46:40.197 に答える
6

Joe Gregario によるhttplib2もお勧めします。標準ライブラリの httplib の代わりにこれを定期的に使用しています。

于 2008-09-22T17:05:30.620 に答える
3

put.pyをご覧になりましたか?私は過去にそれを使用しました。urllibを使用して独自のリクエストをハックすることもできます。

于 2008-09-21T20:12:49.260 に答える
2

もちろん、ソケットからurllibの微調整まで、あらゆるレベルの既存の標準ライブラリを使用して独自のロールを作成できます。

http://pycurl.sourceforge.net/

「PyCurlはlibcurlへのPythonインターフェースです。」

「libcurlは無料で使いやすいクライアント側のURL転送ライブラリです。...HTTPPUTをサポートしています。」

「PycURLの主な欠点は、これらの優れたPythonicクラス階層がないlibcurlの比較的薄いレイヤーであるということです。これは、libcurlのC APIに精通していない限り、学習曲線がやや急になることを意味します。」

于 2008-09-21T20:17:08.077 に答える
1

使用できます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)
于 2021-02-26T08:01:36.060 に答える
0

使用する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
于 2020-08-02T18:49:39.923 に答える