HTTP 200响应与预期不符,Python

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

我正在编写一个程序,该程序创建HTTP请求并使用SSL安全地发送给我。它使用python库SOCKET发送/接收数据。我遇到的问题是,我已经收到200状态,但是身体不如预期。我已经通过POSTMAN运行了相同的URI,没有任何问题。

这里是完整响应,以字节为单位(在线的字节小于缓冲区(4096):]

b'HTTP / 1.1 200 OK \ r \ n日期:2020年5月20日,星期三23:42:55 GMT \ r \ n服务器:Apache \ r \ n严格的传输安全性:max-age = 31536000; includeSubDomains \ r \ nCache-Control:no-cache =“ Set-Cookie,Set-Cookie2” \ r \ nAccept-Ranges:字节\ r \ n变量:Accept字符集,接受编码,接受语言,接受\ r \ nX帧选项:SAMEORIGIN \ r \ nX-UA兼容:IE = edge \ r \ nTransfer-Encoding:分块\ r \ n内容类型:application / json \ r \ n \ r \ n845 \ r \ n'

我期望在845 \ r \ n之后出现JSON数据,就像我在其他响应中看到的一样,但是什么也没有。

我发送请求的代码是:

'''
    for i in nic_list:
      try:

        create_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
        bind_addr_socket = create_socket.bind((i, 0))

        with socket.create_connection((net_loc, port)) as sock:
            with context.wrap_socket(sock, server_hostname=net_loc) as ssock:

                    parse = urlparse(type)
                    http_type = 'GET {} HTTP/1.1\r\nHost:{}\r\nAuthorization: Basic {}\r\nX-auth-access-token: {}\r\nX-auth-refresh-token: {}\r\nContent-Type: text/html\r\n\r\n'.format(parse[2], net_loc, creds, access_token, refresh_token)
                    ssock.sendall(http_type.encode())
                    response = ssock.recv(4096)

      except (socket.gaierror, ValueError) as error:
        continue
'''

http_type变量生成以下HTML,出于机密性,我修改了以下输出:

GET /api/fmc_config/v1/domain/ededededed-e0f2-11e3-8169-6d9ed49edef/policy/accesspolicies/000C29F5-FE9F-0ed3-0000-691
489779138/accessrules/0rffr29F5-FE9F-0ed3-0000-derfrfrfr524550 HTTP/1.1
Host:10.1.1.1
Authorization: Basic cfencklnelfkcnelkfnv=
X-auth-access-token: djeidjkfjrjf-frfjirfj
X-auth-refresh-token: frhfuhrufhrifh-fjrifjrifjirfj
Content-Type: text/html
python-3.x apache sockets http http-status-codes
1个回答
0
投票

transfer-encoding标头表示服务器正在分块写入套接字,因此您需要多次调用recv。如您所见,第一个块是845个字节。您需要修改过程,以这种方式读取所有数据。这是您可以do that的方式。

© www.soinside.com 2019 - 2024. All rights reserved.