为防止服务器不能及时响应,发至外部服务器的请求都应该带着 timeout 参数。
在默认情况下,除非显式指定了 timeout 值,requests 是不会自动进行超时处理,代码可能会挂起若干分钟。
连接超时一般设置为5秒,因为 TCP 数据包重传窗口 的默认大小是 3秒。
如果发现设置timeout=5后长时间不响应问题依然存在,可以将timeout里的参数细化 timeout=(3,7)
# python requests
# 使用requests模拟登陆,获取数据,提交数据
url = 'www.jd.com'
1.GET请求
ret = requests.get(url=url, params=None)
2.POST请求
data = {"username": "root", "password": "pwd"}
ret = requests.post(url=url, data=data)
3.PUT请求
data = {"key": 'val'}
data = json.dumps(data)
# {'Connection': 'close'} 请求后及时断开,防止重复多次请求造成500
headers = {'Content-Type': 'application/json', 'Connection': 'close'}
auth = ('username', 'password')
ret = requests.put(url=url, data=data, headers=headers, auth=auth)
4.session 记录登录状态
session_requests = requests.session()
login_url = "https://passport.jd.com/new/login"
payload = {"username": "username", "password": "pwd"}
session_requests.post(url=login_url, data=payload)
# 可直接进行登录后的操作
session_requests.get(url)
session_requests.post(url, data)
session_requests.close() # 及时关闭
5.各参数的含义
resp = requests.post(url=url, data=data, headers=headers, auth=auth, verify=False, timeout=5)
url: 请求路径
data: 请求数据
headers: 请求头
auth: 用户名和密码
verify: False关闭证书认证
timeout: 超时时间(s)
resp.status_code: 返回的状态码
resp.headers: 返回的请求头
resp.content: 返回的数据内容(bytes)