Requests:
虽然Python的标准库中 urllib 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更简洁方便。
requests 的底层实现其实就是 urllib
Requests的文档非常完备,中文文档也相当不错。Requests能完全满足当前网络的需求,支持Python 2.6–3.5,而且能在PyPy下完美运行。
- 开源地址:https://github.com/kennethreitz/requests
- 中文文档 API: http://docs.python-requests.org/zh_CN/latest/index.html
requests的安装方式
- pip3 install requests
基本GET请求
- import requests
- response = requests.get(“http://www.baidu.com/”)
- response = requests.request( “get”, “http://www.baidu.com/” )
response的常用方法:
方法名 | 方法实现的效果 |
---|---|
response.text | 返回解码后的字符串 |
response.content | 返回解码后的字符串 |
response.status_code | 响应状态码 |
response.request.headers | 请求的请求头 |
response.headers | 响应头 |
response.encoding | = ‘utf-8’ 可以设置编码类型 |
response.encodig | 获取当前的编码 |
response.json() | 内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常 |
基本POST请求
1.最基本post方法:
- import requests
- response = requests.post(url=url, data = data)
- url:post请求的目标url
- data:post请求的表单数据
2.传入data数据:
post请求需要添加参数,我们可以利用data表单数据这个参数,把我们需要传递的参数保存。
data = {
username:abc,
password:abc123123,
}
3.post请求上传文件:
import requests
url = 'https://httpbin.org/post'
files = {'file': open('image.png(需要上传的文件)', 'rb')}
response = requests.post(url, files=files)
print(response.text)
4.post请求 web客户验证:
import requests
auth=('text', '123456')
response = requests.get(
'http://192.168.0.1',
auth = auth
)
print(response.text)
5.设置代理:
如果需要代理的话,可以通过为请求方式提供proxies参数来配置请求
import requests
proxies = {
"http": "http://127.168.0.1:1586",
"https": "http://192.168.147.47:4574",
}
response = requests.get(
url='http://www.baidu.com',
proxies = proxies
)
print(response.text)
6.Cookies:
有时候有些网站需要登录才能获取数据,这时候我们就需要模拟登录,模拟登录需要拿到用户的cookies/session.
import requests
#获取Cookies
cookies = response.cookies
print(cookies)
cookies_dict = {}
for cookie in cookies:
cookies_dict[cookie.name] = cookie.value
# print(cookie.name,cookie.value)
print(cookies_dict)
#dict_from_cookiejar:把RequestsCookieJar对象转成字典
cookies_dict2 = requests.utils.dict_from_cookiejar(cookies)
print(cookies_dict2)
#拿到Cookies之后,我们就可以发起请求
#方式一:从浏览器获取cookies,放在请求的头部
#方式二,通过设置请求的cookies参数,
#cookies: (optional) Dict or CookieJar object
response = requests.get(
url=url,headers=headers,
cookies=cookies_dict2#这就是我们处理过后的cookies
)
print(response.status_code)
print('设置cookies后的请求头部',response.headers)
7.session:
在requests请求中,我们往往需要让上下请求保持联系
import requests
#实例化session()对象
session = requests.session()
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
response = session.get('http://www.baidu.com/',headers=headers)
print(response.headers)
print(session.cookies) #session.cookies 保存的是服务器,返回的cookies信息
#当session.cookies有用户信息之后,我们再使用session.get()或者session.post()
#发起请求时,就会自动携带cookies等信息
response = session.get('http://www.baidu.com/',headers=headers)
# 一般情况下,我们会再模拟登录时用到request.session,先完成登录,
# 然后使用session发起请求
8.处理HTTPS请求 SSL证书验证:
Requests也可以为HTTPS请求验证SSL证书:
要想检查某个主机的SSL证书,你可以使用 verify 参数(Defaults to True)
import requests
response = requests.get("https://www.baidu.com/", verify=True)
如果出现以下错误,表示验证证书出错:
SSLError: (“bad handshake: Error([(‘SSL routines’, ‘ssl3_get_server_certificate’, ‘certificate verify failed’)],)”,)
要想跳过书验证,把 verify 设置为 False 就可以正常请求了。
import requests
response = requests.get(“https://www.12306.cn/mormhweb/”, verify = False)