2015-10-14 5 views
5

По какой-то причине мой запрос на размещение не работает, и я получаю синтаксические ошибки. Я новичок в Python, но у меня есть мои запросы GET и POST. Кто-нибудь видит что-то не так с этим запросом и любыми рекомендациями? Я пытаюсь изменить описание к «Измененный Описание»PUT Запрос API REST с использованием Python

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) 

Здесь ошибка я получаю.

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. – AChampion

ответ

3

Синтаксическая ошибка в связи с = знака в вашем 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. Colon и Single Quotes.

И вы уверены, что будете отправлять данные в свои заголовки? Или вы должны заменить payloaddata в запросе put?

Edit:

Как вы редактировали вопрос и теперь вы отправляете данные как тело запроса 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.

+0

Я внес изменения в исходное сообщение, но все еще получаю сообщение об ошибке. Какие-нибудь дополнительные мысли? – Tim

+1

@ Тебе пока не хватает одиночных кавычек вокруг ваших '' данных ': data'. 'data' - это dict, который не может быть ключом для другого dict. –

+0

Вы правы. Это то, что мне нужно было сделать. Спасибо. – Tim

1

Проблема заключается в том, что вы пытаетесь присвоить data к data элементу в словаре:

headers = { ..., data:data } 

Это не может работать, потому что вы не можете использовать словарь в качестве ключа в словаре (технически, потому что это не хешируется).

Вы, вероятно, хотели сделать

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

К сожалению, у Маркуса проблема заключалась не в отсутствии котировок вокруг данных, а вместо этого данные не должны были быть в моем заголовке для начала. – Tim

+0

@Tim Я взял код непосредственно из вашего сообщения об ошибке, поэтому он определенно был там! –

+0

Всегда убедитесь, что код, который вы публикуете, является именно тем кодом, с которым у вас возникли проблемы –

Смежные вопросы