Python:URL正确但出现如404,503错误的一种原因,关于host
这其实是一个很蛋疼的问题,但鉴于我花了好大功夫才找到这个问题,还是记录一下...实际是基本功不扎实。
问题描述
Python在使用urllib库简单获取网站内容时,出现错误503。如:
import urllib.request
url = 'http://www.cnbeta.com'
headers = {
'host': 'www.pcbeta.com'
}
s = urllib.request.Request(url=url, headers=headers)
con = urllib.request.urlopen(s)
解决方法
可能是设置了自定义headers
,其中host
字段中网址并不是URL中请求的网址。
举个例子
如果host缺省,会使用URL中的网址
import urllib.request
url = 'http://www.cnbeta.com'
s = urllib.request.Request(url=url, headers=headers)
con = urllib.request.urlopen(s)
这时抓包可以看到host
的值为www.cnbeta.com
,访问正常。
如果自定义host,会使用host值做DNS之类的,忽略URL
import urllib.request
url = 'http://www.cnbeta.com'
headers = {
'host': 'www.pcbeta.com'
}
s = urllib.request.Request(url=url, headers=headers)
con = urllib.request.urlopen(s)
这时抓包可以看到host
的值为www.pcbeta.com
,请求结果为503错误。