【发布时间】:2019-10-18 01:23:03
【问题描述】:
我正在尝试与 PythonAnywhere 上托管的网络应用程序交谈。这是一个低带宽、低频率的连接,所以我可以使用 http 接口——而且它可以通过浏览器的 http 正常工作。但是,我似乎无法访问在云中运行的 PythonAnywhere 主机上运行的相同服务。
如果我在本地运行服务器,则可以:
import socket
s = socket.socket()
s.connect(('127.0.0.1', 8080))
s.send('GET /check/nicky HTTP/1.1\r\n\r\n')
print (s.recv(1024))
# 'HTTP/1.0 200 OK\r\nDate: Sat, 01 Jun 2019 23:45:14 GMT\r\nServer: WSGIServer/0.2 CPython/3.7.2\r\nContent-Type: application/json\r\nContent-Length: 19\r\n\r\n{"nicky": [0, 120]}'
但是,如果我在 pythonanywhere URL 上使用 socket.getaddrinfo()(以替换上面 s.connect() 中的地址),我会收到“错误请求”响应:
'HTTP/1.1 400 Bad Request\r\nServer: openresty/1.9.15.1\r\nDate: Sat, 01 Jun 2019 23:49:48 GMT\r\nContent-Type: text/html\r\nContent-Length: 179\r\nConnection: close\r\n\r\n<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body bgcolor="white">\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>openresty/1.9.15.1</center>\r\n</body>\r\n</html>\r\n'
如果我在浏览器中输入相同的请求,服务器运行良好——但尝试以编程方式执行它总是以这种方式失败。
这是我不知道的某种代理或端口转发魔法吗?有问题的 pythonanwhere 帐户是免费赠品。
** 如果不清楚 ** @Steffen Ulrich 的诊断是正确的。我最终使用了https://github.com/micropython/micropython-lib/tree/master/urequests,请求的 micropython 克隆,这解决了问题。
【问题讨论】:
-
谢谢。服务器本身是一个提供 http 请求的瓶子应用程序。我正在尝试将它用作 http 微服务——我只是无法让它在 PA 上响应
标签: python sockets pythonanywhere