Версия интерфейса C ++ для HttpWebRequest и HttpWebResponse - PullRequest
1 голос
/ 15 декабря 2009

Нам интересно, как использовать классы HttpWebRequest и HttpWebResponse .net в проекте ATL c ++ - это любой их интерфейс, доступный для класса webrequest в C ++, в настоящее время у нас не может быть проекта c #, поэтому мы ищем альтернативный интерфейс.

Любая помощь будет принята с благодарностью. Ramanand.

Ответы [ 3 ]

3 голосов
/ 15 декабря 2009

У вас есть следующие варианты:

1) Запишите управляемый код HttpWebRequest в файл C # и скомпилируйте его как DLL. Используйте RegAsm.exe, чтобы зарегистрировать его как COM-объект. Используйте объект COM из приложения C / C ++.

2) Как Майкл предложил выше, используйте Managed C ++ для написания кода и взаимодействия / взаимодействия с другими частями вашего кода C / C ++.

3) Не используйте управляемый код! Используйте специфичные для платформы библиотеки - например, WinHTTP от Microsoft хорошо протестирован и поддерживается как для операций на стороне клиента, так и на стороне сервера. Вы также можете использовать Wininet , который используется Internet Explorer, однако его не рекомендуется использовать в сценариях среднего уровня.

Итак, если вам действительно не нужно то, что предлагается пространством имен управляемого кода System.Net, которое недоступно в Wininet / WinHTTP, я бы не стал выбирать управляемый код. Управляемый код принесет в память и ресурсы процессора, которые действительно не нужны, если все, что вы делаете, это загрузка веб-страниц.

2 голосов
/ 15 декабря 2009

пожалуйста, обратитесь к этому сообщению: Как вы делаете HTTP-запрос с C ++?

libcurl рекомендуется во многих сообщениях.

1 голос
/ 15 декабря 2009

Вы должны использовать 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...