![](/img/trans.png)
[英]CInternetSession::OpenURL on Windows Mobile causes error 12029 (cannot connect)
[英]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.