Python + Requests: Connection Keep-Alive
HTTP/HTTPS Header Attribute Connection
http/https header头部参数Connection分为短连接和长连接,对应属性为:close和keep-alive。http/https短连接是一次性读写完成后断开的连接,长连接则是在连接保持范围内可分多次传输数据。不管是长连接还是短连接都是包含读写时间限制的。http/https协议头部header的Connection属性的意义是提高互联网资源利用效率和服务质量。
国内出现一些片面推荐长连接的“流派”。长连接和短连接应该是有其不同的用途。比如说,最常见的下载文件,应该使用的是短连接;浏览多媒体,则用长连接更好。事实上,会经常发现一些网站几乎使用的都是keep-alive的长连接!
理论上来说,长连接和短连接本质是一样的。长连接更像是多个省略重复握手的短连接的组合。从整个http/https连接生命周期来说,短连接是一个短会话,而长连接是一个长会话。短连接在完成一次完整的对话后即时丢弃会话。长连接在会话周期内包含一个或多个完整的对话。
Requests
bash环境下用pip安装python requests库。(msdos的差不多)
~$: pip install requests
Session会话
Session是requests库保持长连接的一个途径。使用urllib库里的request.Request包含添加“Connection: keep-alive”的header头部的时候,会发现最终得到的回复很可能是Connection: close的短连接。由此猜测,默认的http/https连接可能是短连接。当然,现在一些Server服务器软件均默认支持keep-alive属性。keep-alive的长连接需要维护一个交互的时效会话。
更新自定义HTTP工具包:httpkit.py。
# -*- coding: utf-8 -*-
"""
@file: httpkit
@author: MR.N
@created: 2022/4/2 4月
@updated: 2022/5/23 5月
@version: 1.0
@blog: https://blog.csdn.net/qq_21264377
"""
import time
import urllib.parse
import urllib.request
import requests
import urllib3
import http.cookiejar
import ssl
import socket
import gzip
from uas import *
import random
SOCKET_TIMEOUT = 30
HTTPS_TIMEOUT = 10
# ...(略)
def request_res(remote_task=None, ret=[], dtype=0, max_retry=3):
if remote_task is None:
ret += ['', '', '', -1]
return 'err'
if not isinstance(remote_task, RemoteTask):
ret += [''