在 Flask 中向我自己的本地主机发出 POST 请求后出现 WinError 10061

WinError 10061 after making a POST request to my own localhost in Flask

我有这段代码可以向我的本地主机发出 POST 请求:

from flask import Flask, request
import requests

app = Flask(__name__)

@app.route('/test', methods=['POST'])
def test():
    input_json = request.get_json()
    print('data received', input_json)

if __name__ == '__main__':
    app.run()

    res = requests.post('http://localhost:5000/test', json={'name': 'Linus Torvalds'})

在 运行 之后,看到它没有向控制台打印任何内容,我按 CTRL+C 并收到以下错误:

Traceback (most recent call last):
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\urllib3\connection.py", line 170, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\urllib3\util\connection.py", line 96, in create_connection
    raise err
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\urllib3\util\connection.py", line 86, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [WinError 10061] No se puede establecer una conexión ya que el equipo de destino denegó expresamente dicha conexión

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\urllib3\connectionpool.py", line 706, in urlopen
    chunked=chunked,
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\urllib3\connectionpool.py", line 394, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\urllib3\connection.py", line 234, in request
    super(HTTPConnection, self).request(method, url, body=body, headers=headers)
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\http\client.py", line 1277, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\http\client.py", line 1323, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\http\client.py", line 1272, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\http\client.py", line 1032, in _send_output
    self.send(msg)
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\http\client.py", line 972, in send
    self.connect()
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\urllib3\connection.py", line 200, in connect
    conn = self._new_conn()
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\urllib3\connection.py", line 182, in _new_conn
    self, "Failed to establish a new connection: %s" % e
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x0000026DB39B3688>: Failed to establish a new connection: [WinError 10061] No se puede establecer una conexión ya que el equipo de destino denegó expresamente dicha conexión

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\requests\adapters.py", line 449, in send
    timeout=timeout
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\urllib3\connectionpool.py", line 756, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\urllib3\util\retry.py", line 574, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=5000): Max retries exceeded with url: /test (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000026DB39B3688>: Failed to establish a new connection: [WinError 10061] No se puede establecer una conexión ya que el equipo de destino denegó expresamente dicha conexión'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "only_post_request.py", line 15, in <module>
    res = requests.post('http://localhost:5000/test', json={'name': 'Linus Torvalds'})
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\requests\api.py", line 117, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\requests\api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\requests\sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\requests\sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\Carlitos\miniconda3\envs\python3.7\lib\site-packages\requests\adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=5000): Max retries exceeded with url: /test (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000026DB39B3688>: Failed to establish a new connection: [WinError 10061] No se puede establecer una conexión ya que el equipo de destino denegó expresamente dicha conexión'))

我找不到解决问题的方法。如果我没记错的话,由于某些奇怪的原因我无法建立到我自己的服务器的连接。

我有 Windows 西班牙语,所以 [WinError 10061] 被翻译成:[WinError 10061] Cannot establish a connection as the target computer expressly denied that connection.

首先,运行服务器程序,
然后 运行 客户端程序在 python 的另一个 shell 中,它将工作。

虽然您在 app.run 下写 requests,但 requests 不会 运行。如果你在 app.run 之前写,那么它会给出错误,因为服务器还没有准备好。因此,运行 客户端来自另一个文件,运行 服务器来自另一个文件。

或者您也可以这样做,在某些路径中编写 requests 脚本。喜欢:

@app.route("/"):
def index():
    res = requests.post('http://localhost:5000/test', json={'name': 'Linus Torvalds'})
    return res

但对你来说它不会工作因为你没有从 /test 返回任何东西你只是打印在 /test.

中接收的数据