我的应用程序运行在Windows中,我必须发送一些请求到服务器。我目前正在使用libcurl。什么是最好的库发送HTTP请求的桌面应用程序
但是,在请求发送到服务器之前涉及带有身份验证的代理服务器时,存在限制。
我探讨了libcurl中的选项,但我无法使其工作。如果我硬编码的用户名/密码它的作品。但我不想通过我的应用程序获取用户名和密码;我更喜欢libcurl可以在传输开始时请求这些。
有没有不同的库,我可以使用像winhttp或libcurl是最好的使用?
下面是使我已经实现代理用法与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;
你指的是什么限制吗?如果认证是通过对证书进行硬编码来实现的,则通过动态地提供证书来工作。而不是仅仅转储libcurl,发布SSCCE关于如何设置和发送HTTP请求的信息,并查看您遇到的实际问题是否可以解决。 –
我认为如果您发布了一份SSCCE和您正在做的事情以及您获得的结果的大纲,您就有更好的机会解决您的问题。 –
这是我第一次听到sscce,你可以发送一个链接在那里发布我的问题。谢谢。如果您有libcurl问题,我已经发送了一封电子邮件来卷曲用户分发列表并等待回复 –