Python发送网络请求(requests)
作者:阿飞学不会吖
Python发送网络请求(requests)
Python已经是广泛使用的脚本语言了,我们可以使用requests库进行网络请求。
在PyPI中搜索 requests
,就可以找到这个库
1. 安装
pip install requests
安装完成后,在py脚本中使用库,需要 import
进行代码导入
import requests
2. 发送请求
2.1 发送GET请求
import requests r = requests.get('https://api.github.com/events') print(r)
如果请求成功,返回的结果为 Response 对象
GET 请求也是可以传递参数的,上面的代码演示的是无参数形式,可以通过 params
参数传递 GET 参数。
import requests payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get('https://httpbin.org/get', params=payload)
2.2 发送POST请求
import requests r = requests.post('https://httpbin.org/post', data={'key': 'value'}) print(r)
POST请求通过 data
参数传递请求参数
2.3 输出其他信息
import requests r = requests.get('https://api.github.com/events') print(r) print(r.encoding); print(r.url); print(r.status_code); print(r.cookies); print(r.headers);
encoding 表示编码;url 表示完整请求路径;status_code 表示 http 请求状态码;cookies 表示 cookies 信息;headers 表示请求头信息。
3. 心得
Python的requests 库可以实现网络请求,可以以非常简单的API发送GET、POST请求,并可以根据得到的Response对象获取请求结果
Python多进程调用requests API发送网络请求导致python程序崩溃
描述
在涉及到multiprocess的python项目中,如果在forked出的process中,调用requests API(i.e. requests.get('...'), 该进程会崩溃。
原因
根据对代码执行路径的分析,以及issue 和其他网友的记录, 可以判定该bug的出现原因为Mac的libdispatch并不是fork-safe,从而导致在fork出的进程里使用requests出错。
解决方案
在main process里完成requests相关初始化
如果确实要在fork出的process里调用requests,那么在调用前,添加以下代码:
os.environ['no_proxy']='*'
来跳过network proxy lookup。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。