我们想知道如何使用HttpWebRequest和HttpWebResponse .net框架C++项目中的类是他们在c++中为webrequest类公开的任何接口,目前我们不能有一个c#项目,所以我们正在寻找替代接口。
任何帮助都将不胜感激。拉马南德。
发布于 2009-12-16 04:46:39
您有以下选项:
1)将托管HttpWebRequest代码写入C#文件,并将其编译为动态链接库。使用RegAsm.exe将其注册为COM对象。使用C/C++应用程序中的COM对象。
2)正如Michael上面所建议的,使用托管C++来编写代码,并与C/C++代码的其他部分进行互操作/接口。
3)不要使用托管代码!使用特定于平台的库-例如,微软的WinHTTP经过了良好的测试,并支持客户端和服务器端的操作。您也可以使用Internet Explorer使用的Wininet,但不建议在中间层方案中使用它。
因此,除非您确实需要System.Net托管代码命名空间提供的、在Wininet/WinHTTP上不可用的东西,否则我不会选择托管代码。托管代码将带来内存和cpu开销,如果您所做的全部工作都是下载网页,则这些开销实际上是不需要的。
发布于 2009-12-15 20:40:13
请参考这篇文章:How do you make a HTTP request with C++?
在许多帖子中都推荐使用libcurl。
发布于 2009-12-15 20:47:15
你必须使用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();https://stackoverflow.com/questions/1907131
复制相似问题