2015-10-14 15 views
5

Z jakiegoś powodu moje polecenie put nie działa i pojawia się błąd składniowy. Jestem nowy w Pythonie, ale moje żądania GET i POST działają. Czy ktoś widzi coś złego w tej prośbie i jakichkolwiek zaleceniach? Próbuję zmienić opis do „Zmieniono opis”Żądanie PUT do REST API przy użyciu Pythona

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) 

Tutaj jest błąd otrzymuję.

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

* Z jakiegoś powodu moja prośba put nie działa, a ja dostaję błędy składniowe. * Oczywiście, jest to niezwykle ważne, aby skopiować i wkleić te błędy tutaj, ponieważ będą one najbardziej prawdopodobnie rozwiązać problem * natychmiast *. –

+0

Zgadzam się z tobą. Zaktualizowałem mój pierwotny wpis powyżej wraz z błędem. – Tim

+1

Masz swoje "dane" w nagłówkach - prawdopodobnie wystarczy usunąć dane z nagłówków, które już przekazałeś jako parametr "data". – AChampion

Odpowiedz

3

błąd składni w powodu = znak w swoim słowniku headers:

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

Powinno być:

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

Zobacz data=data zmienia się z 'data':data. Colon i pojedyncze cytaty.

Czy jesteś pewien, że będziesz wysyłać dane w nagłówkach? Czy powinieneś zamienić swój payload na data w swoim zgłoszeniu data?

Edit:

Jak już edytowane pytanie i teraz wysyłasz dane jako ciało umieścić życzenie za requests.put(data=data) więc nie ma potrzeby go w nagłówkach. Wystarczy zmienić nagłówki:

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

Ale jak masz ustawić nagłówek Content-Type do application/json więc myślę, że w swoim wniosku PUT należy zrobić

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

który przesyła dane jako JSON.

+0

Wprowadziłem zmiany do mojego pierwotnego wpisu, ale nadal otrzymuję błąd. Jakieś dodatkowe myśli? – Tim

+1

@ Wciąż brakuje ci pojedynczych cudzysłowów wokół "danych": danych ". 'data' to dyktatura, która nie może być kluczem do innego dyktowania. –

+0

masz rację. To właśnie musiałem zrobić. Dziękuję Ci. – Tim

1

Problemem jest to, że starają się przypisać data do elementu data w słowniku:

headers = { ..., data:data } 

To nie może działać, ponieważ nie można używać słownika jako klucz w słowniku (technicznie, ponieważ nie jest zgodny z haseł).

Prawdopodobnie chciał zrobić

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

Niestety, Marcus nie był problemem z brakującymi kwotowaniami wokół danych, ale zamiast tego dane nie powinny znajdować się w moim nagłówku. – Tim

+0

@Tim Wziąłem kod bezpośrednio z komunikatu o błędzie, więc zdecydowanie tam było! –

+0

Zawsze upewnij się, że kod, który publikujesz, jest dokładnie tym kodem, z którym masz problemy. –

Powiązane problemy