运行以下命令后:
curl --data-binary @request.bin $URL --trace trace.txt > out.txt
输出文件不包含任何内容(其大小为零),但在跟踪.txt我可以读到(除其他外)这些:
<= Recv data, 5 bytes (0x5)
0000: 30 0d 0a 0d 0a 0....
我希望输出文件包含30 0d 0a 0d 0a
,或者至少不为空。我错在哪里?
NB:服务器的响应是“OK”:
<= Recv header, 17 bytes (0x11)
0000: 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK.
答案1
0d 0a 0d 0a
表示 2 次CR LF
,它是服务器和客户端之间 HTTP 对话交换的一部分,表示“http 会话结束”。我猜这里的零0....
对应于Content-Length: 0
标头,这意味着服务器返回了空回复。您可以看到它为空out.txt
。非空回复有什么原因吗,或者您也想捕获输出标头out.txt
?
答案2
30 0d 0a 0d 0a 这是从 HTTP 服务器到客户端的终止零消息。
在服务器使用“数据块”的情况下会发生这种情况:
HTTP 规范提供了两种方法来指定请求的结束位置。Content-Length 标头和 Transfer-Encoding 标头。
“Transfer-Encoding 标头用于指定消息主体使用分块编码。每个块由以字节为单位的块大小(十六进制)组成,后跟换行符,后跟块内容。消息以大小为零的块结束。”