gpt4 book ai didi

http - 希望了解使用 curl --trace 发出的 HTTP 请求中两个字节的含义

转载 作者:可可西里 更新时间:2023-11-01 17:05:44 25 4
gpt4 key购买 nike

tl;dr "HTTP header 末尾和HTTP响应正文的开头是指什么?”

我正在使用非常出色的 libcurl 向各种第 3 方端点发出 HTTP 请求。这些端点不在我的控制之下,并且需要实现规范。为了帮助调试和开发这些端点,我已经实现了文本输出功能,如果您使用 curl.setopt(pycurl.VERBOSE, 1) 从带有 -v 标志的命令行发出 curl 请求,您可能会看到和 curl.setopt(pycurl.DEBUGFUNCTION, debug_function)

这一直工作得很好,但最近我遇到了一个请求,我的调试函数处理它的方式与 curl 的调试输出不同。我确定是因为我不了解 HTTP 规范。

如果使用 --verbose 从命令行发出 curl 请求,我将返回以下内容。

# redacted headers
< Via: 1.1 vegur
<
{"code":"InvalidCredentials","message":"Bad credentials"}*

Connection #0 to host redacted left intact

如果使用 --trace 发出相同的请求,将返回以下内容

0000: 56 69 61 3a 20 31 2e 31 20 76 65 67 75 72 0d 0a Via: 1.1 vegur..
<= Recv header, 2 bytes (0x2)
0000: 0d 0a ..
<= Recv data, 1 bytes (0x1)
0000: 33 3
<= Recv data, 62 bytes (0x3e)
0000: 39 0d 0a 7b 22 63 6f 64 65 22 3a 22 49 6e 76 61 9..{"code":"Inva
0010: 6c 69 64 43 72 65 64 65 6e 74 69 61 6c 73 22 2c lidCredentials",
0020: 22 6d 65 73 73 61 67 65 22 3a 22 42 61 64 20 63 "message":"Bad c
0030: 72 65 64 65 6e 74 69 61 6c 73 22 7d 0d 0a redentials"}..
<= Recv data, 1 bytes (0x1)
0000: 30 0
<= Recv data, 4 bytes (0x4)
0000: 0d 0a 0d 0a ....
== Info: Connection #0 to host redacted left intact

我测试过的所有 HTTP 客户端库都没有在响应正文中包含这些字节部分,所以我猜这些是我不知道的 HTTP 规范的一部分,但我找不到引用对他们来说,我不知道如何处理他们。

如果有帮助,我认为 curl 正在使用这个 https://github.com/curl/curl/blob/master/src/tool_cb_dbg.c为了在第一个示例位中构建输出,我并不是真正的 c/c++ 程序员,而且我无法对逻辑进行逆向工程。

有人知道这些字节是什么吗?

最佳答案

0d 0aASCII control characters代表carriage returnline feed , 分别。 CRLF 在 HTTP 中用于 mark the end of a header field (此时您不必担心一些历史异常)。双 CRLF 应该是 mark the end of the fields section的消息。

您观察到的 33 39 是 ascii 格式的“39”。这是chunk size indicator - 被视为十六进制数。响应 header 中 Transfer-Encoding: chunked 的存在可能支持这一点。

关于http - 希望了解使用 curl --trace 发出的 HTTP 请求中两个字节的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44550031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com