使用代理时,如何在urllib2请求中自定义Header值?
在urllib2中结合代理使用自定义Header的方法
嘿,我来帮你搞定这个问题!其实只需要调整下代码的调用逻辑,就能在使用代理的同时带上自定义Header了,这里有两种实用的方法供你选择:
方法1:将自定义Request对象传给opener.open()
这是最灵活的方式,适合单次请求需要特殊Header的场景。你可以继续用urllib2.Request构造带Header的请求对象,再把这个对象传给opener.open(),而不是直接传URL。
完整代码示例:
import urllib2 # 定义自定义Header headers = {} headers['User-Agent'] = "你的User-Agent值" url = "目标端点的URL" # 设置代理 proxy = urllib2.ProxyHandler({'https': '代理IP:端口'}) opener = urllib2.build_opener(proxy) # 构造带Header的Request对象,再用opener发起请求 req = urllib2.Request(url, headers=headers) response = opener.open(req) print(response.read())
方法2:给opener全局添加默认Header
如果希望这个opener发起的所有请求都自动带上同一套Header,可以用opener.addheaders设置全局默认Header:
import urllib2 headers = {} headers['User-Agent'] = "你的User-Agent值" url = "目标端点的URL" proxy = urllib2.ProxyHandler({'https': '代理IP:端口'}) opener = urllib2.build_opener(proxy) # 将Header转为键值对列表,添加到opener的默认Header集合中 opener.addheaders = [(key, value) for key, value in headers.items()] # 直接传URL即可,请求会自动带上预设的Header response = opener.open(url) print(response.read())
两种方法都能满足你的需求:如果只是个别请求需要特殊Header,选方法1;如果所有请求都用同一套Header,方法2会更省心。
内容的提问来源于stack exchange,提问作者hnvasa
相关产品推荐
相关产品推荐

