Я пытаюсь поговорить с веб-приложением, размещенным на 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]}'
Однако, если я использую socket.getaddrinfo()
в URL-адресе pythonanywhere (для замены адреса в 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,, и это решило проблему.