python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python发送网络请求

Python发送网络请求(requests)

作者:阿飞学不会吖

这篇文章主要介绍了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。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文