какая библиотека лучше всего отправлять http-запрос для настольных приложений

Мое приложение работает в Windows, и мне нужно отправить несколько запросов на сервер. В настоящее время я использую libcurl.

Однако есть ограничение, когда прокси-сервер с аутентификацией задействован до отправки запроса на сервер.

Я исследовал параметры в libcurl, но не смог заставить его работать. Если я жестко закодировал имя пользователя / пароль, он работает. Но я не хочу получать имя пользователя и пароль в моем приложении; Я бы предпочел, чтобы libcurl мог запрашивать их в начале передачи.

Есть ли другая библиотека, которую я могу использовать, например, winhttp или libcurl является лучшей?

Ниже приведены настройки скручивания перед выполнением запроса.

curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_URL, urlString.data());
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_WRITEFUNCTION, receiveDataCallback);
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_WRITEDATA, &curlPerformStorage);
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_FOLLOWLOCATION, 1);
if(NULL != GetWindowsProxyConfig().lpszProxy){
LPWSTR wStr = GetWindowsProxyConfig().lpszProxy;
char* buffer = new char[100];
wcstombs(buffer, wStr, 100) ;
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_PROXY, "<proxy_name>");
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_PROXYPORT, <number>);
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_HTTPAUTH, CURLAUTH_NONE);
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
} else {
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_PROXY, "<proxy_name>");
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_PROXYPORT, <number>);
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
}
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_USE_SSL, CURLUSESSL_ALL);
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_SSL_VERIFYPEER, 1);
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_SSL_VERIFYHOST, 2);
if(proxyStr.length() > 0){
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_HTTPPROXYTUNNEL, 1L);
}
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_FAILONERROR, 1);
curlResultCode= curl_easy_setopt ( curlHandle, CURLOPT_ERRORBUFFER, errorbuffer );

int nConnectionTimeout = curlPerformStorage.GetConnectionTimeOut();
if (nConnectionTimeout > 0)
{
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_CONNECTTIMEOUT, nConnectionTimeout);
}
int nTransferTimeout = curlPerformStorage.GetTransferTimeOut();
if (nTransferTimeout > 0)
{
curlResultCode=curl_easy_setopt(curlHandle, CURLOPT_TIMEOUT, nTransferTimeout);
}
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_PROGRESSFUNCTION , ProgressCallback);
if (curlResultCode == CURLE_OK)
{
curlResultCode = curl_easy_setopt(curlHandle, CURLOPT_NOPROGRESS, FALSE);
curlResultCode= curl_easy_setopt(curlHandle, CURLOPT_PROGRESSDATA , &curlPerformStorage);
}
curlResultCode = curl_easy_perform(curlHandle);
if (curlResultCode != CURLE_OK)
{
}
else
{

}
curl_easy_reset(curlHandle);
return curlResultCode;

0

Решение

Я реализовал использование прокси с помощью libcurl, это возможно и является наиболее кроссплатформенным решением.

Сказав это, в Windows лучше всего придерживаться стеков связи Windows, так как ими будет легче манипулировать в окнах, а также будет проще работать с прокси-серверами (много раз получая свою конфигурацию из определений компьютеров автоматически).

На Windows это главным образом переброска между WinHTTP и WinINet.

  • WinINet считается проще и более высокого уровня, подходит для
    клиенты получают доступ в основном. Например, появится всплывающее окно с запросом
    имя пользователя и пароль прокси автоматически.
  • WinHTTP считается очень низким уровнем и больше подходит для очень
    сложные серверы, работающие в многопоточном режиме, где требуется большой контроль над соединением.

90% времени вы можете просто использовать Wininet

Вот полное сравнение между ними:
Сравнение Microsoft WinHTTP и WinINet

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]