Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用cURL和requests库的BLSAPI数据?_Python_Python Requests - Fatal编程技术网

Python 使用cURL和requests库的BLSAPI数据?

Python 使用cURL和requests库的BLSAPI数据?,python,python-requests,Python,Python Requests,总之,我正在尝试实现一个curl请求,以从BLS获取数据。按照他们的示例(显示curl请求),我的代码如下所示: import requests headers = {'Content-type': 'application/json'} params = {"seriesid":["LEU0254555900", "APU0000701111"],"startyear":"2002", &quo

总之,我正在尝试实现一个curl请求,以从BLS获取数据。按照他们的示例(显示curl请求),我的代码如下所示:

import requests
headers = {'Content-type': 'application/json'}
params = {"seriesid":["LEU0254555900", "APU0000701111"],"startyear":"2002", "endyear":"2012"}
p = requests.post('http://api.bls.gov/publicAPI/v1/timeseries/data/', params = params,headers = headers)
print p.url
print p.content
我得到以下(错误)输出:

{“status”:“REQUEST_FAILED”,“responseTime”:0,“message”:[“对不起,有问题。” 发生内部错误。请检查输入参数并重试 再次请求。“],“结果”:null}

有人必须处理BLSAPI和python吗?
请求库是否最适合于此?

您需要以json的形式发送数据,而不是以
params
dict的形式传递数据。
params
设置url参数,这不是您想要的,您需要以
数据的形式传递它

这应该起作用:

import requests
import json
headers = {'Content-type': 'application/json'}
data = json.dumps({"seriesid":["LEU0254555900", "APU0000701111"],"startyear":"2002", "endyear":"2012"})
p = requests.post('http://api.bls.gov/publicAPI/v1/timeseries/data/', data=data, headers=headers)
print p.url
print p.content

在帖子中,
params
可以作为url表单编码的帖子数据发送,而不是在url查询字符串上发送……但无论如何,它肯定不会神奇地发现您想要JSON编码的数据而不是表单编码的数据,并以这种方式发送,这绝对是正确的答案。@abarnert-我可以问一下您是如何得出这个结论的吗?显式声明将在查询字符串中发送
params
。方法是使用
请求编写和调试项目。考虑到这个项目是在1.0之前编写的,更不用说1.2了,事情已经发生了变化,你现在有了更直接的控制,这绝对是合理的(甚至可能)。(但无论如何,要点是,没有一个库能够神奇地发现您希望在通用POST发送方法中使用JSON编码,因此您的答案几乎可以保证适用于任何通用HTTP库。)@abarnert
params
始终是查询字符串。如果是一本字典,那么在帖子中对
数据
做了特殊的处理,但这使它是形式编码的,而不是JSON。@Lukasa:“…但这使它是形式编码的,而不是JSON”是我的全部观点。作为旁注:你想要的是
'Content-Type'
,而不是
'Content-Type'
。HTTP头是错误的,大多数服务器都会正确处理它们……但也有一些写得不好的服务器,甚至更多的代理、日志解析器等都会出错。因此,通常最好使用规范大写字母,或者在您的情况下,使用与您正在移植的示例相同的大写字母。