Высокоуровневая клиентская библиотека HTTP для родного C / C ++ в Win32
Нет ли «высокого уровня»? HTTP библиотеки для родного C / C ++ в Win32 или я просто смотрю в неправильных местах?
По «высокоуровневому» Я имею в виду API, который позволяет мне выполнять веб-запросы / ответы HTTP на C ++ с "примерно таким же" уровень абстракции как .NET Framework (но учтите, что использование C ++ / CLI для меня не вариант).
Как сделать что-то подобное (с примерно таким же количеством кода) в C / C ++ в Win32 без использования .NET? В качестве ссылки я включил пример кода, чтобы показать, как я это делаю в C #.
byte[] fileBytes = null;
bool successfulDownload = false;
using (WebClient client = new WebClient())
{
WebProxy proxy = WebProxy.GetDefaultProxy();
client.Proxy = proxy;
tryAgain:
try
{
fileBytes = client.DownloadData(fileUrl);
successfulDownload = true;
}
catch (WebException wEx)
{
if (wEx.Response != null && wEx.Response is HttpWebResponse)
{
string username = null, password = null;
bool userCanceled = false;
HttpStatusCode statusCode = ((HttpWebResponse)wEx.Response).StatusCode;
switch (statusCode)
{
case HttpStatusCode.ProxyAuthenticationRequired:
// This is just a convenience function defined elsewhere
GetAuthenticationCredentials(fileUrl, true,
out username, out password, out userCanceled);
if (!userCanceled)
{
client.Proxy.Credentials = new NetworkCredential(username, password);
goto tryAgain;
}
break;
case HttpStatusCode.Unauthorized:
// This is just a convenience function defined elsewhere
GetAuthenticationCredentials(fileUrl, false,
out username, out password, out userCanceled);
if (!userCanceled)
{
client.Credentials = new NetworkCredential(username, password);
goto tryAgain;
}
break;
}
}
}
}