我們想知道如何在ATL C++項目中使用HttpWebRequest和HttpWebResponse.net框架類是他們的任何接口公開在C++中的webrequest類,目前我們不能有ac#項目,所以我們正在尋找替代界面。C++接口版本的HttpWebRequest和HttpWebResponse
任何幫助將不勝感激。拉曼達。
我們想知道如何在ATL C++項目中使用HttpWebRequest和HttpWebResponse.net框架類是他們的任何接口公開在C++中的webrequest類,目前我們不能有ac#項目,所以我們正在尋找替代界面。C++接口版本的HttpWebRequest和HttpWebResponse
任何幫助將不勝感激。拉曼達。
您有以下選擇:
1)撰寫您管理的HttpWebRequest代碼到一個C#文件,並將其編譯爲一個DLL。使用RegAsm.exe將其註冊爲COM對象。使用C/C++應用程序中的COM對象。 2)正如Michael在上面提出的那樣,使用Managed C++編寫代碼,並與C/C++代碼的其他部分編寫interop/interface。
3)不要使用託管代碼!使用特定於平臺的庫 - 例如,來自Microsoft的WinHTTP已經過良好測試,並且支持客戶端和服務器端操作。您也可以使用Internet Explorer使用的Wininet,但不建議將其用於中間層場景。
因此,除非您真的需要System.Net託管代碼名稱空間提供的某些Wininet/WinHTTP上沒有的東西,否則我不會選擇託管代碼。如果你所做的只是下載網頁,託管代碼將帶來內存和cpu開銷,這實際上並不需要。
請參考這個帖子:How do you make a HTTP request with C++?
libcurl在很多帖子建議。
您必須使用C++/CLI。代碼片段可能看起來像這樣。
// Open a connection
System::Net::HttpWebRequest ^_HttpWebRequest = safe_cast<System::Net::HttpWebRequest^>(System::Net::HttpWebRequest::Create(_URL));
_HttpWebRequest->AllowWriteStreamBuffering = true;
// You can specify additional header values:
_HttpWebRequest->UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)";
_HttpWebRequest->Referer = "http://www.google.com/";
// set timeout for 20 seconds (Optional)
_HttpWebRequest->Timeout = 20000;
// Request response:
System::Net::WebResponse ^_WebResponse = _HttpWebRequest->GetResponse();
// Open data stream:
System::IO::Stream ^_WebStream = _WebResponse->GetResponseStream();
// Do something with stream
_tmpImage = Image::FromStream(_WebStream);
// Cleanup
_WebResponse->Close();
_WebResponse->Close();
真的感謝您的更新,我將使用WinHttp/Wininet方法來下載方法。 – 2009-12-16 06:15:05