解析错误:服务器返回格式错误的响应 - 错误:解析错误:预期的 HTTP/ - 当尝试使用邮递员访问我的应用程序 URL 之一时

问题描述 投票:0回答:1

我正在管理一个由第三方在 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

然后我也试了:

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
python url request postman tornado
1个回答
3
投票

已解决

由于暴露的API由第三方构建供内部使用,因此不对外公开

我不知道,所以在请求 URL 中我输入了 HTTP 请求的众所周知的端口号,数字 22(参见知名端口号列表。)。

为了解决问题,在请求URL中,我把

<target_machine_port>
改成了API实际暴露的端口。

请求类型:

POST

网址:

http://<machine_ip>:<target_machine_port>/path/objectAlpha/
© www.soinside.com 2019 - 2024. All rights reserved.