Requests传递 URL 参数
你也许经常想为 URL 的查询字符串(query string)传递某种数据。如果你是手工构建 URL,那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。例如, http://www.bcbxhome.com/bcbxxy/search.php?key=val。Requests 允许你使用 params 关键字参数,以一个字符串字典来提供这些参数。举例来说,如果你想传递 key1=value1 和 key2=value2 到 http://www.bcbxhome.com/bcbxxy/search.php ,那么你可以使用如下代码:
>>> payload = {'key1': 'value1', 'key2': 'value2'}>>> r = requests.get(" http://www.bcbxhome.com/bcbxxy/search.php", params=payload)
实战操作一下吧:
>>>payload = {'mod': 'forum', 'searchid': '8', 'orderby': 'lastpost', 'ascdesc': 'desc', 'searchsubmit': 'yes', 'kw': '接口自动化'}>>>r = requests.get(" http://www.bcbxhome.com/bcbxxy/search.php", params=payload)
通过打印输出该 URL,你能看到 URL 已被正确编码:
>>> print(r.url)http://www.bcbxhome.com/bcbxxy/search.php?mod=forum&searchid=8&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=%E6%8E%A5%E5%8F%A3%E8%87%AA%E5%8A%A8%E5%8C%96
注意字典里值为 None 的键都不会被添加到 URL 的查询字符串里。
>>>payload = {'mod': 'forum', 'searchid': '8', 'orderby': 'lastpost', 'ascdesc': 'desc', 'searchsubmit': 'yes', 'kw': None}>>> r = requests.get('http://httpbin.org/get', params=payload)>>> print(r.url)http://www.bcbxhome.com/bcbxxy/search.php?mod=forum&searchid=8&orderby=lastpost&ascdesc=desc&searchsubmit=yes
你还可以将一个列表作为值传入:
>>> payload = {'mod': 'forum', 'searchid': '8', 'orderby': 'lastpost', 'ascdesc': 'desc', 'searchsubmit': 'yes', 'kw': ['接口','自动化']}>>> r = requests.get('http://httpbin.org/get', params=payload)>>> print(r.url)http://www.bcbxhome.com/bcbxxy/search.php?mod=forum&searchid=8&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=%E6%8E%A5%E5%8F%A3&kw=%E8%87%AA%E5%8A%A8%E5%8C%96
完整代码如下:
import requestspayload = {'mod': 'forum', 'searchid': '8', 'orderby': 'lastpost', 'ascdesc': 'desc', 'searchsubmit': 'yes', 'kw': '接口自动化'}result = requests.get(" http://www.bcbxhome.com/bcbxxy/search.php", params=payload)print(result.url)payload = {'mod': 'forum', 'searchid': '8', 'orderby': 'lastpost', 'ascdesc': 'desc', 'searchsubmit': 'yes', 'kw': None}result = requests.get(" http://www.bcbxhome.com/bcbxxy/search.php", params=payload)print(result.url)payload = {'mod': 'forum', 'searchid': '8', 'orderby': 'lastpost', 'ascdesc': 'desc', 'searchsubmit': 'yes', 'kw': ['接口','自动化']}result = requests.get(" http://www.bcbxhome.com/bcbxxy/search.php", params=payload)print(result.url)
对应结果如下:
http://www.bcbxhome.com/bcbxxy/search.php?mod=forum&searchid=8&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=%E6%8E%A5%E5%8F%A3%E8%87%AA%E5%8A%A8%E5%8C%96http://www.bcbxhome.com/bcbxxy/s ... sc&searchsubmit=yeshttp://www.bcbxhome.com/bcbxxy/s ... A%E5%8A%A8%E5%8C%96
有没有疑问为啥kw后面的汉字变成了%+英文+数字?
这个叫url编码,这里就不展开细讲了可以去这里尝试一下http://www.jsons.cn/urlencode/