簡體   English   中英

如果定義了標頭,則CInternetSession :: OpenURL異常。 如果沒有,效果很好。 為什么?

[英]CInternetSession::OpenURL exception if headers are defined. Works fine if not. Why?

嘗試使用標頭將應用程序版本詳細信息記錄在我們的Web日志中:

應該是一個襯套。但是由於某種原因,無論何時我為標頭指定除NULL之外的任何內容,它都會導致異常(InternetOpenUrl()調用返回NULL)-有人能夠解釋為什么嗎?

  CInternetSession internet;
  CHttpFile * pHttpFile;
  CString headers;// = APPLICATION_SUITE_NAME;
  DWORD dwHeadersLength = -1;

  headers.Format("%s %s %s\n",APPLICATION_SUITE_NAME,SHORT_APPLICATION_VERSION,BUILDNO_STR);

  pHttpFile =(CHttpFile *) internet.OpenURL(lpszURL, 1, INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_DONT_CACHE, headers, dwHeadersLength);

如果沒有標頭,則dwHeadersLength參數(例如,傳遞NULL,-1),那么它運行正常,我看到請求到達了我們的網站。 但是,如果我傳入自定義標頭,為什么它會失敗?

您的CString是否解析為CStringA或CStringW? 如果是后者(例如,寬字符),則來自MSDN( http://msdn.microsoft.com/zh-cn/library/aa384247%28VS.85%29.aspx ):

如果dwHeadersLength為-1L並且lpszHeaders不為NULL,則將發生以下情況:如果調用HttpSendRequestA,該函數將假定lpszHeaders為零終止(ASCIIZ),並計算長度。 如果調用HttpSendRequestW,該函數將失敗,並顯示ERROR_INVALID_PARAMETER。

我之所以提到HttpSendRequest(),是因為實際上CInternetSession :: OpenURL()調用InternetOpenUrl(),其lpszHeaders參數的文檔將您帶到HttpSendRequest()的文檔頁面。

編輯:另一種可能是調用失敗,因為標頭似乎不是規范格式:根據HTTP 1.1規范,標頭應為“名稱:值”格式,並且每個標頭都應與下一個標頭分隔由CRLF。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM