2015-10-14 31 views
5

何らかの理由で私のput要求が機能していないため、構文エラーが発生しています。私はPythonの初心者ですが、私はGETとPOSTのリクエストを処理しています。誰もがこの要求や推奨事項に間違ったことを見ていますか?私はここでPUT Pythonを使用したREST APIへのリクエスト

PUT

#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) 

は私が取得していますエラーである「変更内容」に説明を変更しようとしています。あなたのheaders辞書であるための=符号で

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

をやってみたかった。*もちろん、それはあなたがいるので、彼らはほとんどの意志、ここでこれらのエラーをコピーして貼り付けることが重要ですおそらく問題を*即座に解決する*。 –

+0

私はあなたに同意します。上記の私の元の投稿をエラーとともに更新しました。 – Tim

+1

あなたのヘッダーに 'data'があります。おそらく' data'パラメータとして渡したヘッダーからデータを削除するだけです。 – AChampion

答えて

3

構文エラー:

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

それは次のようになります。

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

data=data'data':dataで変更されて参照してください。コロンとシングルクォート。

ヘッダーにデータを送信してもよろしいですか?またはputリクエストで​​をdataに置き換える必要がありますか?

編集:

あなたが質問を編集した、今あなたがPUTリクエストのボディrequests.put(data=data)としてデータを送信しているので、ヘッダーにその必要がないので。ちょうどにあなたのヘッダーを変更します。

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

しかし、あなたはapplication/jsonにごContent-Typeヘッダーを設定しているように、私はあなたのPUTリクエストであなたがJSONとしてあなたのデータを送信される

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

をやるべきだと思います。

+0

元の投稿に変更を加えましたが、引き続きエラーが発生しました。その他の考え? – Tim

+1

@Timあなたは ''data':data'の回りにまだ一重引用符がありません。 'data'は別のdictのキーにはならないdictです。 –

+0

あなたは正しいです。これは私がする必要があったものです。ありがとうございました。 – Tim

1

問題は、あなたの辞書にdata要素にdataを割り当てようということです:あなたは、技術的に(辞書でキーとして辞書を使用することはできませんので、動作しないことができる

headers = { ..., data:data } 

ハッシュ可能ではないため)。

は、おそらく何らかの理由で私のPUTリクエストが動作していないと私は構文エラーを取得しています*

headers = { ..., "data":data } 
+0

残念ながら、Marcusの問題はデータの周りに見落とされた引用符ではなく、代わりにデータが私のヘッダにあってはならないはずです。 – Tim

+0

@Tim私はあなたのエラーメッセージからコードを直接取ったので、間違いなくそこにいました! –

+0

投稿したコードが問題のあるコードであることを常に確認してください。 –

関連する問題