每次运行脚本\ python 2.7时,HTTP响应代码都不同

时间:2016-12-31 13:50:07

标签: python-2.7 http-status-code-404 python-requests urllib2 urllib

我编写了简单的脚本来检查受错误404影响的网址。

当我在404上使用url运行脚本时,它确实会返回正确的响应,但有时会返回另一个(503),我不明白为什么会发生这种情况,我已经在许多其他URL上测试过了结果永远不会一致。有人会这样,并解释为什么我的结果不断改变,即使实际的网址状态不是吗?

提前感谢您的帮助

我尝试使用以下模块:

urllib,urllib2,requets

所有这些都产生了相同的不一致结果。

以下是脚本:

import requests

for url in ['https://www.amazon.es/gp/product/B00QTVL0T4']:
    response = requests.get(url)
    response.status_code
    print(response)

回复[404]和回复[503](不正确)

II

import urllib

result=''

#***** paste url into square bracket ****#

for url in ["https://www.amazon.es/gp/product/B003ODEJZ2",'https://www.amazon.fr/gp/product/B01H801C9C']:
    a=urllib.urlopen(url)
    e=a.getcode()
    if e==404:
        result+=(url+" Error_404 "+"\n")
    else:
        result+=(url+" Link_OK "+"\n")
print result

III

import urllib2
for url in ['https://www.amazon.es/gp/product/B003ODEJZ2','https://www.amazon.fr/gp/product/B01H801C9C','https://www.amazon.de/dp/B00B8PRE1Y']:
    try:
        connection = urllib2.urlopen(url)
    except urllib2.HTTPError, e:
         if e.getcode()==404:
             print (url+" Error_404")
         else:
             print(url+" Link_Ok")

1 个答案:

答案 0 :(得分:1)

503' s原因通常是"服务不可用"这意味着无论处理您的请求是什么都无法找到提供响应的支持服务。这可能由物理或软件提供的负载均衡器(F5s,HAProxy等),CDN(Fastly,Cloudflare等),或正在运行但没有适当的联系应用程序的Apache或Nginx等返回(无论出于何种原因)。

由于您的示例中的网址是亚马逊网址,因此CDN可能会返回503. CDN(如Fastly)使用Varnish和Varnish将在以下情况下返回503:

  • 后端服务器返回503,因此Varnish将其转发
  • 后端服务器返回了一个不可解析的响应

有时候CDN可能会返回503:

  • CDN超时从原点读取
  • CDN超时连接到原点
  • CDN无法读取/写入原点
  • 原始服务器拒绝了CDN的连接
  • CDN找不到到原点的路线
  • 来源错误配置了TLS

(以及其他许多其他问题)

实际上,我们不太可能告诉你为什么你会得到一个503.你需要更多地反省一下这个反应并查看相关的文档。