我正在管理一个由第三方在 python 中构建的应用程序。
我有这个 url dispatcher
urls += [(r'/path/objectAlpha/(.*)', objectAlphaHandler)] # this was made by third parts, it is expected to work
和这个班级
class objectAlphaHandler(BaseHandler):
def __init__(self, application, request, **kwargs):
super(objectAlphaHandler, self).__init__(application, request, **kwargs) # do the init of the basehandler
@gen.coroutine
def post(self, action=''):
response = {}
...
response = yield self.my_method(json_data)
...
self.write(json.dumps(response))
def my_method(self, json_data)
...
我想检查应用程序是否正确接收请求并返回一些响应。
所以我尝试用 Postman 访问那个 url
请求类型:
POST
网址:
http://<target_machine_ip>:<target_machine_port>/path/objectAlpha/
<target_machine_port>
是 22.
我从 Postman 回复框收到这个错误
解析错误:服务器返回格式错误的响应
当我点击“在控制台中查看”时,我看到了
POST http://<target_machine_ip>:22/path/objectAlpha/ Error: Parse Error: Expected HTTP/ Request Headers Content-Type: application/json User-Agent: PostmanRuntime/7.28.4 Accept: */* Postman-Token: d644d7dd-699b-4d77-b32f-46a575ae31fc Host: xx.xxx.x.xx:22 Accept-Encoding: gzip, deflate, br Connection: keep-alive Request Body
Error: Parse Error: Expected HTTP/
是什么意思?
我检查了我的应用程序日志,但它似乎没有处理任何请求,即使 Postman 指示服务器正在返回(格式错误的)响应。
我还尝试将目标网址更改为:
https...
但它返回
Error: write EPROTO 28427890592840:error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER:../../third_party/boringssl/src/ssl/tls_record.cc:242:
然后我也试了:
http://<target_machine_ip>/path/objectAlpha/
和
<target_machine_ip>/path/objectAlpha/
一般返回:
Error: connect ECONNREFUSED <target_machine_ip>:80
我也试过换行
urls += [(r'/path/objectAlpha/(.*)', objectAlphaHandler)]
与
urls += [(r'/path/objectAlpha/', objectAlphaHandler)]
和
urls += [(r'/path/objectAlpha', objectAlphaHandler)]
但这些都不起作用。
怎么了?我该如何解决?
显然,根据 Postman Github 上的this thread,问题只发生在 Postman Desktop 而不是浏览器上的 Postman。
所以我尝试在我的浏览器上发送请求表单 Postman 但我得到了
Cloud Agent Error: Can not send requests to reserved address. Make sure address is publicly accessible or select a different agent.
因为,根据这个其他线程,
Postman 网站无法向您计算机的本地主机发送请求。它首先需要使用 Postman 桌面客户端连接到您的 PC
即使我遵循该答案中的指示
运行它[ndr。 Postman desktop],然后转到浏览器中的 Postman 工作区 -> 发送请求,它将起作用。
我还是一样
Error: Parse Error: Expected HTTP/
在 Postman Desktop 和 Postman on browser 上。
继续调试,我尝试从我的终端对该 URL 进行卷曲:
myuser@mymachine-VirtualBox:~$ curl --verbose "http://<target_machine_ip>:<target_machine_port>/path/objectAlpha"
我得到了:
* Trying <target_machine_ip>:<target_machine_port>... * Connected to <target_machine_ip> (<target_machine_ip>) port <target_machine_port> (#0) > GET /orkpos5/receipt HTTP/1.1 > Host: <target_machine_ip>:<target_machine_port> > User-Agent: curl/7.74.0 > Accept: */* > * Received HTTP/0.9 when not allowed * Closing connection 0 curl: (1) Received HTTP/0.9 when not allowed
已解决
由于暴露的API由第三方构建供内部使用,因此不对外公开
我不知道,所以在请求 URL 中我输入了 HTTP 请求的众所周知的端口号,数字 22(参见知名端口号列表。)。
为了解决问题,在请求URL中,我把
<target_machine_port>
改成了API实际暴露的端口。
请求类型:
POST
网址:
http://<machine_ip>:<target_machine_port>/path/objectAlpha/