Bibliothèque de client HTTP de haut niveau pour C / C ++ natif dans Win32
Il n'y a pas de "haut-niveau" HTTP bibliothèques natif C/C++ Win32 ou suis-je en le regardant dans les mauvais endroits?
Par "haut-niveau", je veux dire une API qui me permet de faire web HTTP des requêtes/réponses en C++ avec "sur la même" niveau d'abstraction que l' .NET framework (mais notez que l'utilisation de C++/CLI n'est pas une option pour moi).
Comment faire quelque chose comme ceci (avec environ la même quantité de code en C/C++ Win32 sans aide .NET? Comme une référence, un exemple de code pour montrer comment je voudrais le faire en 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;
}
}
}
}
source d'informationauteur Guido Domenici
Vous devez vous connecter pour publier un commentaire.
Win32 fournit la
Internet*
fonctions.http://msdn.microsoft.com/en-us/library/aa385473(SV.85).aspx
Vous aurez besoin de faire un (autant que je me souvienne, je n'ai pas touché ces Api en plus de 10 ans)
InternetOpenURL
etInternetReadFile
.Je pense que libcurl correspond à ces exigences. Et puis certains.
Cet exemple montre comment obtenir un HTTP de la page, de les stocker dans la mémoire. C'est un peu plus de code que votre exemple, mais c'est dans C.
En dehors de libcurl/curlpp (qui est souple et puissant, mais je trouve très maladroit...) il y a deux bibliothèques C++ je vais garder mes yeux sur. Les deux sont tout à fait nouvelle et basé sur Boost::ASIO. Cependant ni soutien proxy (du mieux que je peut dire).
rpc-netlib (blog) est peut-être plus mature (je sais qu'il a une certaine real-world testing), mais à un manque de délais d'attente (j'y travaille!). Exemple:
Urdl (la documentation) est écrit par l'ASIO créateur et a des délais d'attente (mais a seulement été annoncé le mois dernier). Il utilise un modèle différent, en choisissant de travailler avec des flux:
Je suis d'accord que le C++ n'est pas un grand soutien pour HTTP, mais ces deux bibliothèques montrer beaucoup de promesse.
POCO a aussi de la croix-plate-forme de composants de réseau.
Les exemples donnent un programme FTP comme quelque chose comme ceci (C'est sans la vérification des erreurs duvet)
Vous pas à la recherche dans les mauvais endroits. C'est juste la triste réalité. C'est pourquoi il n'y a wrapper c++ pour libcurl appelé curlpp.
Ci-dessous est un exemple de comment retrive une page web et de les imprimer sur la sortie standard stream.
Partie de la bibliothèque Qt, QtNetwork, est également une possibilité.
Une autre possibilité:
http://pion.org/projects/pion-network-library
et l'autre:
http://sourceforge.net/projects/urdl/