TL做出含義;博士「什麼將HTTP標頭的結尾和HTTP響應主體的開始之間的字節0x33
0x39
0x0d
0x0a
指什麼?」看明白的HTTP請求的兩個字節,捲曲--trace
我正在使用徹底出色的libcurl向各種第三方終端發出HTTP請求。這些端點不在我的控制之下,並且需要實施規範。爲了幫助調試和開發這些端點我已經實現了文本輸出功能,你可能會看到,如果你使用curl.setopt(pycurl.VERBOSE, 1)
和curl.setopt(pycurl.DEBUGFUNCTION, debug_function)
這使得從與-v標誌在命令行卷曲請求已被偉大的工作,但最近我碰到一個請求,我的調試功能不能像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規範的一部分,但我找不到對它們的引用,我不知道如何處理它們。
如果它有助於我認爲捲曲使用該https://github.com/curl/curl/blob/master/src/tool_cb_dbg.c建設輸出的第一個例子位,我不是一個真正的C/C++程序員,我一直無法進行反向工程的邏輯。
有誰知道這些字節是什麼?
Thanks @DaSourcerer。我相信你是對的。 「Transfer-Encoding:chunked」頭文件存在,我不認爲這是一個巧合,0x39是十進制的57,它是響應主體的長度。好一個。 – squareproton
哦,我的。感謝@DanielStenberg糾正我:是的,塊的大小確實是ASCII編碼的十六進制。我不知何故陷入二進制。 – DaSourcerer