2016-01-31 41 views
0

HttpOpenRequest需要一個HTTP接受頭在一個非常奇怪的格式。可以忽略該參數並稍後添加一個正常的接受標頭HttpAddRequestHeaders和HttpOpenRequest中Accept頭

hfile = HttpOpenRequest(hLastConnection, 'GET', '/path', NULL, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_KEEP_CONNECTION, 0); 
    HttpAddRequestHeaders(hfile,'Accept: foobar', 14, HTTP_ADDREQ_FLAG_REPLACE or HTTP_ADDREQ_FLAG_ADD); 

它確實工作(在葡萄酒),但似乎沒有記錄。

同樣,如何對內容類型和引用者的情況呢?

回答

0

沒有什麼奇怪關於如何HttpOpenRequest()接受Accept值。它只是一個以null結尾的字符串數組。 Accept標題允許多種類型。 HttpOpenRequest()將連接值併爲您設置Accept標題的格式。使用HttpAddRequestHeaders(),您必須手動執行此操作。但是,無論你使用HttpOpenRequest()HttpAddRequestHeaders()沒什麼區別,因爲Accept頭不影響客戶所有,因此它不會不管你怎麼把它搬進請求。它僅在準備響應時影響服務器。

同樣的,Referer,它不會影響客戶端,僅服務器,所以把它添加到,但是你想請求。雖然HttpOpenRequest()有一個很好的簡單參數爲Referer值,所以你應該使用它。

Content-Type,在另一方面,只能與HttpAddRequestHeaders()設置。但是請求GET請求中指定Content-Type沒有意義,因爲請求中沒有有效負載。 Content-Type僅適用於有有效載荷的請求,如POSTPUT

+0

好了,我已經把所有格式的標題的列表。在列表中搜索'accept'並將其解除分隔將會很奇怪,只是爲了讓'HttpOpenRequest'再次將它加入到一起。我開始使用'HttpSendRequest'的頭參數來設置Content-Type的示例代碼片段。這和'HttpAddRequestHeaders'一樣嗎?順便說一句,如果只有一個頭被設置爲'HttpAddRequestHeaders',那麼沒有理由使用CRLF結束字符串,是嗎? – BeniBela

+0

您可以根據需要使用'HttpAddRequestHeaders()'或'HttpSendRequest()'來指定額外的頭文件,但在這兩種情況下,每個單獨的頭文件在末尾都需要一個CRLF。 –

+0

但是不是最後的標題,或?因爲我從來沒有把CRLF放在這個上面,它工作。 (考慮將其改爲擁有CRLF「但從不改變正在運行的系統」) – BeniBela

相關問題