发送字典列表作为字典的值与requests.post出错
问题描述:
我有clien-server应用程序。 我本地化的麻烦,这有逻辑:发送字典列表作为字典的值与requests.post出错
客户:
# -*- coding: utf-8 -*-
import requests
def fixing:
response = requests.post('http://url_for_auth/', data={'client_id': 'client_id',
'client_secret':'its_secret', 'grant_type': 'password',
'username': 'user', 'password': 'password'})
f = response.json()
data = {'coordinate_x': 12.3, 'coordinate_y': 8.4, 'address': u'\u041c, 12',
'products': [{'count': 1, 'id': 's123'},{'count': 2, 'id': 's124'}]}
data.update(f)
response = requests.post('http://url_for_working/, data=data)
response.text #There I have an Error about which I will say later
的oauth2运作良好。但是,在服务器端我没有产品request.data
<QueryDict: {u'token_type': [u'type_is_ok'], u'access_token': [u'token_is_ok'],
u'expires_in': [u'36000'], u'coordinate_y': [u'8.4'],
u'coordinate_x': [u'12.3'], u'products': [u'count', u'id', u'count',
u'id'], u'address': [u'\u041c, 12'], u'scope': [u'read write'],
u'refresh_token': [u'token_is_ok']}>
的QueryDict的这一部分让我伤心......
'products': [u'count', u'id', u'count', u'id']
当我试图使Python字典:
request.data.dict()
... u'products': u'id', ...
当然,其他领域也可以很好地与Django序列化器验证。但不是,因为我有错误的价值。
答
看起来像请求(因为它具有x-www-encoded-form默认值)不能包括字典的列表作为键的值在字典中,所以...我应该在这种情况下使用json。 最后我做了这个功能:
import requests
import json
def fixing:
response = requests.post('http://url_for_auth/', data={'client_id': 'client_id',
'client_secret':'its_secret', 'grant_type': 'password',
'username': 'user', 'password': 'password'})
f = response.json()
headers = {'authorization': f['token_type'].encode('utf-8')+' '+f['access_token'].encode('utf-8'),
'Content-Type': 'application/json'}
data = {'coordinate_x': 12.3, 'coordinate_y': 8.4, 'address': u'\u041c, 12',
'products': [{'count': 1, 'id': 's123'},{'count': 2, 'id': 's124'}]}
response = requests.post('http://url_for_working/', data=json.dumps(data),
headers=headers)
response.text
在那里我得到了正确的回应。 解决!
此解决方案无法工作,快速浏览一下'http:// url_for_working /缺少结束单引号。 – PrestonDocks
@PrestonDocks修复,谢谢)) –