所以,我想做的就是向511 api发送请求并从火车站返回火车时间。我可以使用完整的url请求来做到这一点,但我希望能够设置值而无需粘贴一个字符串然后发送该字符串。我想让api返回不同车站的列车时间。我看到其他使用标头的请求,但我不知道如何在请求中使用标头,并且对文档感到困惑。
这有效......
urllib2.Request("http://services.my511.org/Transit2.0/GetNextDeparturesByStopCode.aspx?token=xxxx-xxx&stopcode=70142")
response = urllib2.urlopen(request)
the_page = response.read()
我希望能够像这样设置值......
token = xxx-xxxx
stopcode = 70142
url = "http://services.my511.org/Transit2.0/GetNextDeparturesByStopCode.aspx?"
......然后像这样把它们放在一起......
urllib2.Request(url,token, stopcode)
得到相同的结果。
答案 0 :(得分:0)
string formatting文档是开始了解更多插入值的不同方法的好地方。
val1 = 'test'
val2 = 'test2'
url = "https://www.example.com/{0}/blah/{1}".format(val1, val2)
urllib2.Request(url)
答案 1 :(得分:0)
缺少的部分是“urllib”需要与“urllib2”一起使用。具体来说,函数urllib.urlencode()返回值的编码版本。
来自urllib文档here
import urllib
query_args = { 'q':'query string', 'foo':'bar' }
encoded_args = urllib.urlencode(query_args)
print 'Encoded:', encoded_args
url = 'http://localhost:8080/?' + encoded_args
print urllib.urlopen(url).read()
所以修正后的代码如下:
import urllib
import urllib2
token = xxx-xxxx
stopcode = 70142
query_args = {"token":token, "stopcode":stopcode}
encoded_args = urllib.urlencode(query_args)
request = urllib2.Request(url+encoded_args)
response = urllib2.urlopen(request)
print(response.read())
实际上,使用请求包而不是urllib,urllib2要容易一百万次。上面的所有代码都可以替换为:
import requests
token = xxx-xxxx
stopcode = 70142
query_args = {"token":token, "stopcode":stopcode}
r = request.get(url, params = query_args)
r.text