web-dev-qa-db-ja.com

REST APIを使用したPUTリクエストPython

何らかの理由でputリクエストが機能せず、構文エラーが発生します。 Pythonは初めてですが、GETおよびPOSTリクエストが機能しています。このリクエストと推奨事項に何か問題がありますか?変更しようとしています説明を「変更された説明」に

[〜#〜]プット[〜#〜]

#import requests library for making REST calls
import requests
import json

#specify url
url = 'my URL'

token = "my token"

data = {
        "agentName": "myAgentName",
        "agentId": "20",
        "description": "Changed Description",
        "platform": "Windows"
        }

headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", data:data}

#Call REST API
response = requests.put(url, data=data, headers=headers)

#Print Response
print(response.text)

ここに私が得ているエラーがあります。

Traceback (most recent call last):
  line 17, in <module>
    headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", data:data}
TypeError: unhashable type: 'dict'
10
Tim

headers辞書の_=_記号による構文エラー:

_headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", data=data}
_

そのはず:

_headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", 'data':data}
_

_data=data_が_'data':data_で変更されたのを参照してください。コロンと単一引用符。

そして、あなたはあなたのヘッダーでデータを送信しますか?または、payloadリクエストでdataputに置き換えますか?

編集:

質問を編集し、データをPUTリクエストの本文requests.put(data=data)として送信しているので、ヘッダーでは必要ありません。ヘッダーを次のように変更してください:

_headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json"}
_

しかし、あなたの_Content-Type_ヘッダーを_application/json_に設定したので、私はあなたのPUTリクエストであなたがすべきだと思います

_response = requests.put(url, data=json.dumps(data), headers=headers)
_

つまり、データをjsonとして送信します。

6
Muhammad Tahir

問題は、辞書のdata要素にdataを割り当てようとすることです。

headers = { ..., data:data }

ディクショナリのキーとしてディクショナリを使用できないため、これは機能しません(技術的には、ハッシュ化できないためです)。

あなたはおそらくやりたかった

headers = { ..., "data":data }
1
Marcus Müller