Requests高级操作(一)
1、代理设置
代理(英语:Proxy),也称网络代理,是一种特殊的网络服务,英文全称是(Proxy Server),其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。代理服务器就好象一个大的Cache,这样就能显著提高浏览速度和效率。Requests模块设置代理的方式如下:
import requests
proxy_server={'http':'http://127.0.0.1:443','https':'https://127.0.0.1:443'}
response=requests.get('https://www.taobao.com/',proxies=proxy_server,verify=False)
print(response.content.decode('utf-8'))
# 包含用户名和密码的代理:
import requests
# proxies={ "http": "http://username:password@127.0.0.1:443/" }
proxies={ "http": "http://15581660487:123456@127.0.0.1:443/" }
response=requests.get("https://www.taobao.com/",proxies=proxies,verify=False)
print(response.content.decode('utf-8'))
2、超时设置
Requests模块可以设置接收数据的超时时间,超出设定的时间还没有数据返回,就抛出异常,超时设置有两种类型表达:float、tupleimport
import requests
# response=requests.get('https://www.baidu.com',timeout=2) #float
response=requests.get('https://www.baidu.com',timeout=(0.1,0.2)) #tuple 前面是链接请求时间 后面是接收内容时间
print(response.content.decode('utf-8'))
3、重定向设置
在请求url时,服务器会自动把我们的请求重定向,可以使用r.history来查看重定向。如果不想进行自动重定向,可以用参数allow_redirects关闭。
#重定向
import requests
response=requests.get('http://www.360buy.com')
print(response.history)
print(response.url)
response1=requests.get('http://www.360buy.com',allow_redirects=False)
print(response1.history)
print(response1.url)
4、SSL Cert Verification
很多网站都是https,但是不用证书也可以访问,大多数情况都是可以携带也可以不携带证书如知乎\百度等都是可带可不带,但有硬性要求的,则必须带,比如对于定向的用户,拿到证书后才有权限访问某个特定网站。举例:https://www.12306.cn
import requests
response=requests.get('https://www.12306.cn')
print(response.content.decode('utf-8'))
#如果response.content.decode('utf-8')报错,说明网站需要SSL认证,处理方式如下
#方式一:verify改为False 不认证证书
#老版本requests处理警告
response=requests.get('https://www.12306.cn',verify=False)
print(response.content.decode('utf-8'))
# 方式二:关闭警告
#关闭警告方法1
requests.packages.urllib3.disable_warnings()
#关闭警告方法2
# urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
response=requests.get('https://www.12306.cn',verify=False)
print(response.content.decode('utf-8'))
#方式三:pyopenssl
# pip install -U requests[security]
# pip会安装三个security相关的package:pyopenssl\cryptography \cffi
#方式四:加上证书:(最好的解决方案)
response=requests.get('https://www.12306.cn',cert=('/path/server.crt','/path/key'))