【问题标题】:503 Reponse when trying to use python request on local website尝试在本地网站上使用 python 请求时出现 503 响应
【发布时间】:2017-03-18 18:24:43
【问题描述】:

我正在尝试从本地服务器上抓取我自己的网站。但是当我对它使用python请求时,它给了我一个响应503。网络上的其他普通站点工作。有什么原因/解决方案吗?

import requests 
url = 'http://127.0.0.1:8080/full_report/a1uE0000002vu2jIAA/'

r = requests.get(url)

print r

打印出来

<Response [503]>

经过进一步调查,我发现了与我类似的问题。 Python requests 503 erros when trying to access localhost:8000

但是,我认为他还没有解决这个问题。我可以通过网络浏览器访问本地网站,但无法使用 requests.get 功能访问。我也在使用 Django 来托管服务器。

python manage.py runserver 8080 

当我使用: curl -vvv http://127.0.0.1:8080

* Rebuilt URL to: http://127.0.0.1:8080/
*   Trying 10.37.135.39...
* Connected to proxy.kdc.[company-name].com (10.37.135.39) port 8099 (#0)
* Proxy auth using Basic with user '[company-id]'
> GET http://127.0.0.1:8080/ HTTP/1.1
> Host: 127.0.0.1:8080
> Proxy-Authorization: Basic Y2FhNTc2OnJ2YTkxQ29kZQ==
> User-Agent: curl/7.49.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: BlueCoat-Security-Appliance
< Location:http://10.118.216.201
< Connection: Close
<
<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>
* Closing connection 0

【问题讨论】:

  • 他确实解决了这个问题 - 如果您阅读了 cmets。 发现发生了什么,我们有一个内部软件干扰了端口。因此,当我在家用电脑上试用时,它运行良好。
  • 您的 url 中没有指定端口号。 Django 在http://127.0.0.1:8000/ 运行默认服务器,所以你应该尝试url = 'http://127.0.0.1:8000/full_report/a1uE0000002vu2jIAA/'
  • 没有看到最后一行所以上面的命令url应该是http://127.0.0.1:8080/....
  • 我忘记编辑那部分了。端口 8080 也不能正常工作。我编辑了帖子以反映这一点。
  • 如果你curl -vvv http://127.0.0.1:8080会发生什么?

标签: python django python-requests


【解决方案1】:

HTTP Error 503 表示:

Web 服务器(运行网站)当前无法处理 HTTP 请求,原因是服务器临时过载或维护。这意味着这是一种暂时的情况,经过一段时间的延迟会得到缓解。处于这种状态的一些服务器也可能会简单地拒绝套接字连接,在这种情况下,可能会因为套接字创建超时而产生不同的错误。

你可以做以下事情:

  1. 检查您是否能够在浏览器中打开 URL
  2. 如果 URL 正在打开,请检查代码中的域,它可能不正确。
  3. 如果在浏览器中也没有打开,可能是您的网站超载或服务器资源已满,无法执行请求

【讨论】:

    【解决方案2】:

    503 错误的最常见原因是某种形式的代理主机无法与后端通信。例如,如果您让 Varnish 尝试处理请求,但 Apache 已关闭。

    在您的情况下,您的 Django 在端口 8080 上运行。 (这就是8080 的意思)。但是,当您尝试从 127.0.0.1 获取内容时,您将使用默认的 HTTP 端口 (80)。这意味着您的默认服务器(可能是 Apache?NginX?)正在尝试找到一个主机来服务127.0.0.1,但找不到。

    你有两个选择。您可以更新服务器的配置,也可以在 URL 中包含端口。

    url = 'http://127.0.0.1:8080/full_report/a1uE0000002vu2jIAA/'
    

    【讨论】:

    • 我一直在使用 8080。我忘了编辑那部分。我现在已经更新了。谢谢。
    【解决方案3】:

    我无法使用 python 请求请求本地 url,因为公司的网络软件不允许。这是一条死胡同,必须寻求其他途径。

    编辑:工作解决方案

    >>> import requests
    >>> session = requests.Session()
    >>> session.trust_env = False
    >>> r = session.get("http://127.0.0.1:8080")
    >>> r
    <Response [200]>
    

    【讨论】:

    • 您确定这是您网络上的设置而不是本地设备上的设置吗?如果你使用curl --noproxy '*' 127.0.0.1:8080会发生什么?
    • 是的,一个代理阻止我 ping 自己。解决方案现已发布!
    【解决方案4】:

    也许您应该在请求中禁用代理。

    import requests
    
    proxies = {
      "http": None,
      "https": None,
    }
    
    requests.get("http://127.0.0.1:8080/myfunction", proxies=proxies)
    

    参考:

    1. https://stackoverflow.com/a/35470245/8011839
    2. https://2.python-requests.org//en/master/user/advanced/#proxies

    【讨论】:

      猜你喜欢
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 2018-06-03
      相关资源
      最近更新 更多