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