我可以在我的ubuntu桌面上用Python 2.7的urllib2库打开一个网页,例如nike的page。但是,当我将该代码移动到谷歌计算引擎服务器(具有相同的O.S.)时,它开始返回HTTP Error 503: Service Unavailable
。
从一个地方而不是另一个地方可能导致此错误的原因,如果可能的话,我将如何使我的机器始终如一地运行?
答案 0 :(得分:2)
除非您传递'Accept'标头,否则该服务器将返回urllib2.HTTPError: HTTP Error 403: Forbidden
。我尝试时只使用'User-Agent'标题失败了。这是工作代码;我已经注释掉了不必要的“User-Agent”和“Connection”标题,但留待它们参考:
import urllib2
user_agent = {'User-Agent': 'Mozilla/5.0'}
req_headers = {
# 'User-Agent': user_agent,
# 'Connection': 'Keep-Alive',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
}
request = urllib2.Request('http://www.nike.com/us/en_us/c/men', headers=req_headers)
response = urllib2.urlopen(request)
data = response.read()
print data
另请参阅此其他Stackoverflow answer,我将其用作“接受”字符串的参考。
答案 1 :(得分:1)
HTTP状态503表示,我引用RFC 2612:“由于服务器临时过载或维护,服务器当前无法处理请求。这意味着这是一个暂时的情况,在某些情况下会有所缓解延迟。如果已知,延迟的长度可以在Retry-After标头中指示。“
因此,它根本不是关于请求来自何处:它是关于服务器暂时过载或维护的全部内容。检查响应中的Retry-After标头并应用它;或者,如果遗漏,则“一般地重试”。
如果持久(不应该是:503表示服务器遇到临时条件),请与网站系统管理员联系并获取正在进行的操作的说明。重复一遍,这完全是关于您正在联系的Web服务器,应该是临时条件;根本不关心你的客户。