使用 CHttpFile::QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF) 取得回應標頭,Set-Cookie 僅回傳第一組 (PHPSESSID),瀏覽器實際收到多組 Cookie。
HTTP_QUERY_RAW_HEADERS_CRLF 回傳原始標頭,但 Set-Cookie 為多行,部分版本僅回傳第一行。AddRequestHeaders 格式錯誤(含空格、換行),導致 Server 視為異常請求,簡化回應。302、gzip,導致標頭截斷。CString cookie;
DWORD dwIndex = 0;
while (pFile->QueryInfo(HTTP_QUERY_SET_COOKIE, cookie, &dwIndex)) {
AfxMessageBox(cookie); // 每組 Cookie
dwIndex++;
}
pFile->AddRequestHeaders(_T("Accept: */*"));
pFile->AddRequestHeaders(_T("User-Agent: Mozilla/5.0 ..."));
// 參數放在 OpenRequest 的 lpszObjectName,不要塞在 AddRequestHeaders
CHttpFile* pFile = pHttpConnect->OpenRequest(
CHttpConnection::HTTP_VERB_GET,
_T("/api/login.php?callback=...&action=login&login_account=dazhewang&password=111111..."));
pFile->SendRequest();
pFile->AddRequestHeaders(_T("Accept-Encoding: gzip, deflate"));
// WinINet 預設支援 gzip 解壓縮,確保不手動干擾
使用 Wireshark/Fiddler 擷取程式發出的封包與瀏覽器封包,對比:
MFC WinINet 取得多組 Set-Cookie 需迭代 HTTP_QUERY_SET_COOKIE,請求參數應放在 URL,標頭格式需標準,善用抓包工具對比差異。