2017-08-31 32 views
0

使用Python 3.5的时候,并请2.18.4我需要将数据发送到另一个服务无法requests.post,它目前没有出于某种原因。 发送是在我接收并清除来自另一个服务的数据后进行的,并最终将数据验证并设置为本机python字典。 这工作时的数据是硬编码的,我没有使用的输入数据(硬编码的JSON字符串):使用json.dumps

def my_post_method(self, url, data): 
    # import requests (above) 
    return requests.post(
     url, 
     data='{"keyA":"valA", "keyB":"valB" ... }', 
     headers={'Content-Type': 'application/json'}, 
    ) # status 200 

但我不能由于某种原因原始数据发送。从上面

def my_post_method(self, url, data): 
    # import requests, json (above) 
    d = json.dumps(data) 
    return requests.post(
     url, 
     data=d, 
     headers={'Content-Type': 'application/json'}, 
    ) # status 400 

d:{"keyA":"valA", "keyB":"valB" ... }

我试图使用请求JSON参数,而不是数据,但其他服务在另一端显然期望数据参数。 这是否意味着我发布的服务正在等待一个json格式的字符串?

+0

我们可以知道其他服务?我们可以尝试一些公开的东西吗? – GendoIkari

+0

您是否尝试再次使用硬编码字符串进行POST?服务是否可能返回400秒,因为它不希望您两次提交相同的请求? –

+0

谢谢@Rob瓦,但我回答如下─一些奇怪的原因,键 - 值的顺序被考虑到当接收端被验证传入的数据。我真的不知道为什么... – camelBack

回答

2

如果您至少使用版本2.4.2的请求,则完全避免使用json.dumps,我会使用接受Python字典的requests.post中的参数json

More complicated requests

编辑: 我不能重现该问题以任何方式,json应该工作,它发送一个JSON与现代requests后的唯一正确途径。

+0

我不能 - 当我(我上面写的) 我应该降级我请求失败? (2.18.4-> 2.4.2) – camelBack

+0

你有没有指定内容类型的'json'? – GendoIkari

+0

是,仍然没有 – camelBack