2015-10-14 24 views
5

Nedense benim istek isteğim çalışmıyor ve sözdizimi hataları alıyorum. Python’da yeniyim ama GET ve POST taleplerim çalışıyor. Bu istek ve herhangi bir tavsiyede yanlış bir şey gören var mı? Ben açıklama için "Değiştirilen Açıklama"PUT Python kullanarak REST API isteğinde bulunma

PUT İşte

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

alıyorum hatadır değiştirmeye çalışıyorum. senin headers sözlükte nedeniyle = burcunda

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

yapmak istedik. * Açıkçası, bu çünkü onlar en irade, burada bu hataları kopyalama ve yapıştırma kritik öneme sahiptir Muhtemelen sorunu * anında çözebilir *. –

+0

Sana katılıyorum. Yukarıdaki orijinal gönderiyi hatayla birlikte güncelledim. – Tim

+1

'Verilerinizi üstbilgilerinizde var - muhtemelen veriyi zaten 'veri' parametresi olarak ilettiğiniz başlıklarınızdan silmeniz gerekir. – AChampion

cevap

3

Sözdizimi hatası:

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

Olmalıdır:

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

data=data Bkz 'data':data ile değiştirilir. Kolon ve Tek Tırnaklar.

Ve başlıklarınıza veri gönderiyor olacağınızdan emin misiniz? Ya da 'unuzu data ile put isteğinize mi geçirmelisiniz?

Düzenleme:

soruyu düzenledikten ve şimdi PUT isteği gövdesinin requests.put(data=data) gibi verileri gönderiyor gibi

böylece başlıklarında bunun gerek yoktur. Sadece sizin başlıklarını değiştirin:

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

Ama application/json için Content-Type başlık belirledik olarak o yüzden json olarak veri göndermek olduğunu

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

yapmalıyım sizin PUT isteğine düşünüyorum.

+0

Orijinal gönderiimde değişiklikler yaptım ancak yine de hata alıyor. Ek düşünceler var mı? – Tim

+1

@Tim hala 'veri ': data' etrafında tek tırnaklar eksik. “data” başka bir dict için bir anahtar olamaz bir dict. –

+0

siz haklısınız. Yapmam gereken şey buydu. Teşekkür ederim. – Tim

1

sorun Sözlüğünüzde data elemana data atamak deneyin olmasıdır:

headers = { ..., data:data } 

teknik olarak (sözlükte bir anahtar olarak bir sözlük kullanamazsınız çünkü çalışamaz, çünkü yıkanabilir değil).

Muhtemelen Nedense benim koymak isteği çalışmıyor ve ben dizimi hatalarının alıyorum *

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

Maalesef, Marcus, sorun, veriler etrafında eksik olan alıntılarla değil, bunun yerine, başlamamda başlayacak olan veriler olmamalıdır. – Tim

+0

@Tim Kodu doğrudan hata mesajınızdan aldım, bu yüzden kesinlikle oradaydı! –

+0

Her zaman yazdığınız kodun tam olarak sorun yaşadığınız kodun –