如何为API数据传递requests.get命令的日期参数?

时间:2018-04-09 18:55:43

标签: python-2.7 api curl subprocess python-requests

我试图从API来源获取过去的天气数据。但是,我遇到了如何传递日期参数和指定我试图获取数据的日期的问题。我已成功使用curl GET命令,但未成功将其转换为requests.get命令。

以下是有效的:

curl -X GET -G "http://url.com/lat/long" -d start="2018-04-01" -d end="2018-04-04" --user abcd:1234

使用子进程命令我已经得到了该代码。以下是代码:

cmd = 'curl -X GET -G "http://url.com/lat/long" -d start="2018-04-01"  -d end="2018-04-04" --user abcd:1234'

p = sp.Popen(cmd, shell=True,stdout=sp.PIPE, stderr=sp.STDOUT).stdout.read()

p.split('\n')[3]

这是我对requests.get:

的代码
r=requests.get("https://url.com/lat/long",auth=HTTPBasicAuth('user','password'))

但是,无法通过日期参数来限制我的数据拉到我指定的日期范围。

这是我尝试过的几种方法。

r=requests.get("https://url.com/lat/long",start=start,end=end,auth=HTTPBasicAuth('user','password'))

也尝试过:

data = [
  ('startDate', '2018-04-01'),
  ('endDate', '2018-04-08'),
]

r=requests.get("https://url.com/lat/long",data=data,auth=HTTPBasicAuth('user','password'))

有人可以指导我朝正确的方向发展吗?我真的想坚持使用请求库命令,但只有现在正在运行的东西是通过子进程方法运行curl命令,而我并不完全理解这个过程。

2 个答案:

答案 0 :(得分:0)

data = {
  'start': '2018-04-01',
  'end': '2018-04-08'
}

答案 1 :(得分:0)

让我们看一下G命令中的curl参数:

-G, --get           Put the post data in the URL and use GET

这意味着您的数据不会在请求正文中提交,而是在url中作为查询字符串提交。使用requests,您可以使用params参数来实现此目的。

所以你的curl命令相当于:

import requests

url = 'https://url.com/lat/long'
data = {'start': '2018-04-01', 'end': '2018-04-08'}
creds = ('user','password')
r = requests.get(url, params=data, auth=creds)

print(r.text)