【问题标题】:How to send http requests to flask server如何向flask服务器发送http请求
【发布时间】:2016-11-13 14:51:12
【问题描述】:

当我的烧瓶应用程序启动时,它说

Running on http://0.0.0.0:80/

如何向该服务器发送 http 请求?

我试过了

telnet 0.0.0.0 80

但它说:

Trying 0.0.0.0...
telnet: connect to address 0.0.0.0: Invalid argument

我使用了请求模块:

r = requests.get('http://0.0.0.0:80')

结果是一样的

 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 288, in request
    resp = self.send(prep, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 383, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 206, in send
    raise ConnectionError(sockerr)
requests.exceptions.ConnectionError: [Errno 22] Invalid argument

netstat 的输出如下:

# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:domain          0.0.0.0:*               LISTEN
tcp6       0      0 [::]:domain             [::]:*                  LISTEN
udp        0      0 0.0.0.0:domain          0.0.0.0:*
udp        0      0 0.0.0.0:bootps          0.0.0.0:*
udp6       0      0 [::]:domain             [::]:*

【问题讨论】:

  • 您是否尝试过像r = requests.get('http://0.0.0.0')这样的请求?
  • @BubbleHacker:试过了。结果相同
  • 您是否尝试过从网络浏览器访问?也许问题出在服务器端。

标签: python linux http flask python-requests


【解决方案1】:

0.0.0.0 表示“本地机器上的所有 IPv4 地址”。这是一个不可路由的元地址。

如果您想在本地访问服务器,即与服务器在同一台机器上的客户端,请使用 IP 地址 127.0.0.1(环回 Internet 协议)或等效的命名域名 (localhost)

r = requests.get('http://127.0.0.1:80')
r = requests.get('http://localhost:80')

如果您从远程计算机(在同一子网中)访问服务器,您可以通过运行您的服务的服务器的 IP 地址(由您的路由器/网关分配)连接到您的服务器

如果您从远程机器访问服务器,您可以通过路由器的 IP 地址连接到服务器。您需要通过适当的端口转发来设置虚拟服务器。

【讨论】:

  • 我在本地访问服务器。我尝试了r = requests.get('http://localhost:80')r = requests.get('http://127.0.0.1:80')。但它给出了错误requests.exceptions.ConnectionError: [Errno 111] Connection refused
【解决方案2】:

“0.0.0.0”只是一个特殊地址,表明服务器正在监听其接口上的所有IP。

您仍应使用您的计算机本地地址访问它:“127.0.0.1”或“localhost”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 2016-01-16
    相关资源
    最近更新 更多