Proxy-Connection 的值通常是keep-alive或者close,分别表示保持或关闭连接。如果浏览器发送的请求是 HTTP/1.1 版本,那么默认是保持连接的,所以不需要发送 Proxy-Connection: keep-alive。如果浏览器发送的请求是 HTTP/1.0 版本,那么默认是关闭连接的,所以需要发送 Proxy-Connection: keep-alive 来告诉代理希望保持连接。
Proxy-Connection 还可以解决一些代理不兼容的问题。比如,如果代理是 1.0 的,但是服务器是 1.1 的,那么服务器可能会发送 Connection: keep-alive 给代理,但是代理不认识这个头,所以会转发给浏览器。这样就会导致浏览器和代理之间的连接状态不一致。为了避免这种情况,浏览器可以发送 Proxy-Connection: close 给代理,让代理知道要关闭连接,并且重写服务器的响应头为 Connection: close。
Proxy-Connection 和 Connection 都是 HTTP 请求头,用来表示连接的状态。它们的区别是:
简单来说,Proxy-Connection 是一个为了兼容性而存在的头,而 Connection 是一个为了性能而存在的头。
爬虫程序使用爬虫加强版代理IP的情况下,建议保持爬虫服务器与代理服务器之间的连接接以提高连接效率。如果要实现每次HTTP请求代理IP自动切换,只需要将服务器的响应头设置为 Connection: close即可。下面示例通过设置http头,每次请求即可自动切换代理IP,其采集的IP查询网站每次将返回不同的地址信息:
import requests
import time
# 亿牛云 动态转发隧道 爬虫加强版 设置代理IP地址和端口号
proxy_host = 'www.16yun.cn'
proxy_port = '31000'
# 亿牛云 动态转发隧道 爬虫加强版 设置代理IP的用户名和密码
proxy_username = '16YUN'
proxy_password = '16IP'
# 构造代理认证字符串
proxy_auth_string = f'{proxy_username}:{proxy_password}'
# 设置请求头
headers = {'Connection': 'close'}
# 构造请求参数
proxies = {'http': f'http://{proxy_auth_string}@{proxy_host}:{proxy_port}',
'https': f'https://{proxy_auth_string}@{proxy_host}:{proxy_port}'}
# 循环采集100次
for i in range(100):
# 发送GET请求
response = requests.get('https://www.ip138.com', headers=headers, proxies=proxies)
# 分析响应内容并打印IP地址信息
print(response.text)
# 暂停200毫秒,避免请求阻塞
time.sleep(0.2)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。