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 requests
- 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)
- 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%96
- http://www.bcbxhome.com/bcbxxy/s ... sc&searchsubmit=yes
- http://www.bcbxhome.com/bcbxxy/s ... A%E5%8A%A8%E5%8C%96
复制代码
有没有疑问为啥kw后面的汉字变成了%+英文+数字?
这个叫url编码,这里就不展开细讲了可以去这里尝试一下http://www.jsons.cn/urlencode/
![v2-aade3506f15c0b4dee47487fad75fe81_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=0e971be4-792f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-aade3506f15c0b4dee47487fad75fe81_b.jpg)