我正在尝试为我的urllib请求设置用户代理:
.carre:hover{
transform: rotateX(30deg) rotateY(20deg) rotateZ(-20deg) translateX(0)
translateY(0) translateZ(100px);
box-shadow: -100px 100px 100px rgba(0,0,0,.3);
.carre__tippy{
transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg) translateZ(120px);
box-shadow: -50px 50px 20px rgba(0,0,0,.3);
}
.carre__front{
transform: translateZ(50px);
box-shadow: -20px 20px 30px rgba(0,0,0,.3);
opacity: .7;
}
}
最后:
opener = urllib.request.build_opener(
urllib.request.HTTPCookieProcessor(cj),
urllib.request.HTTPRedirectHandler(),
urllib.request.ProxyHandler({'http': proxy})
)
将用户代理标头设置为的最佳方法是什么
response3 = opener.open("https://www.google.com:443/search?q=test", timeout=timeout_value).read().decode("utf-8")
答案 0 :(得分:1)
据我所知,ERR_CONTENT_DECODING_FAILED
有两个选项。
urllib
返回一个OpenerDirector
对象,该对象具有一个build_opener
属性。我们可以使用该属性更改用户代理和其他标头。
addheaders
或者,我们可以使用install_opener
将OpenerDirector对象安装到全局打开器中,然后使用opener.addheaders = [('User-Agent', 'My User-Agent')]
url = 'http://httpbin.org/user-agent'
r = opener.open(url, timeout=5)
text = r.read().decode("utf-8")
提交请求。现在可以使用urlopen
设置标题。
Request
就个人而言,我更喜欢第二种方法,因为它更加一致。一旦安装了打开器,所有请求将具有相同的处理程序,并且我们可以以相同的方式继续使用urllib。但是,如果您不想对所有请求使用这些处理程序,则应选择第一种方法,并使用urllib.request.install_opener(opener)
url = 'http://httpbin.org/user-agent'
headers = {'user-agent': "My User-Agent"}
req = urllib.request.Request(url, headers=headers)
r = urllib.request.urlopen(req, timeout=5)
text = r.read().decode("utf-8")
来设置特定OpenerDirector对象的标头。
有了requests
,事情就变得简单了。
如果要更改所有请求的用户代理或其他标头,则可以使用addheaders
属性,
session.heders
,或者,如果我们只想为特定请求设置标头,则使用s = requests.session()
s.headers['user-agent'] = "My User-Agent"
r = s.get(url, timeout=5)
参数。
headers