J'essaie de créer mon premier client Windows (et ceci est mon premier message), il doit communiquer avec un "service Web", mais j'ai un peu de mal à lire l'en-tête de la réponse. Dans ma chaîne de réponse, ai-je reçu un document JSON de Nice (et c'est mon problème suivant), mais je ne suis pas en mesure de "voir/lire" l'en-tête de la réponse, mais uniquement le corps.
Vous trouverez ci-dessous le code que j'utilise.
WebClient MyClient = new WebClient();
MyClient.Headers.Add("Content-Type", "application/json");
MyClient.Headers.Add("User-Agent", "DIMS /0.1 +http://www.xxx.dk");
var urlstring = "http://api.xxx.com/users/" + Username.Text;
string response = MyClient.DownloadString(urlstring.ToString());
Vous pouvez utiliser WebClient.ResponseHeaders comme ceci:
// Obtain the WebHeaderCollection instance containing the header name/value pair from the response.
WebHeaderCollection myWebHeaderCollection = myWebClient.ResponseHeaders;
Console.WriteLine("\nDisplaying the response headers\n");
// Loop through the ResponseHeaders and display the header name/value pairs.
for (int i=0; i < myWebHeaderCollection.Count; i++)
Console.WriteLine ("\t" + myWebHeaderCollection.GetKey(i) + " = " + myWebHeaderCollection.Get(i));
De https://msdn.Microsoft.com/en-us/library/system.net.webclient.responseheaders(v=vs.110).aspx
Si vous voulez voir la réponse complète, je vous suggère d'utiliser WebRequest
/WebResponse
au lieu de WebClient
. C'est une API de plus bas niveau - WebClient
est destiné à simplifier les tâches très simples (telles que le téléchargement du corps d'une réponse).
(Ou dans .NET 4.5, vous pouvez utiliser HttpClient
.)
Voici un exemple d'utilisation de WebRequest/WebResponse, ce dont @Jon Skeet parlait.
var urlstring = "http://api.xxx.com/users/" + Username.Text;
var MyClient = WebRequest.Create(urlstring) as HttpWebRequest;
//Assuming your using http get. If not, you'll have to do a bit more work.
MyClient.Method = WebRequestMethods.Http.Get;
MyClient.Headers.Add(HttpRequestHeader.ContentType, "application/json");
MyClient.Headers.Add(HttpRequestHeader.UserAgent, "DIMS /0.1 +http://www.xxx.dk");
var response = MyClient.GetResponse() as HttpWebResponse;
for (int i = 0; i < response.Headers.Count; i++ )
Console.WriteLine(response.Headers.GetKey(i) + " -- " + response.Headers.Get(i).ToString());
De plus, je vous recommande vraiment de résumer la logique http en son propre objet et de lui transmettre l'URL, UserAgent et ContentType.
Une méthode simple utilisant WebClient (), combinée avec l'exemple MSDN mentionné ci-dessus (l'exemple MSDN n'explique pas explicitement comment lancer la demande). Ne soyez pas dérouté par les valeurs Properties.Settings.Default.XXXX
, ce ne sont que des variables de chaîne lues à partir du fichier App.settings. J'espère que ça aide:
using (var client = new WebClient()){
try{
var webAddr = Properties.Settings.Default.ServerEndpoint;
Console.WriteLine("Sending to WebService " + webAddr);
//This only applies if the URL access is secured with HTTP authentication
if (Properties.Settings.Default.SecuredBy401Challenge)
client.Credentials = new NetworkCredential(Properties.Settings.Default.UserFor401Challenge, Properties.Settings.Default.PasswordFor401Challenge);
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
client.OpenRead(webAddr);
// Obtain the WebHeaderCollection instance containing the header name/value pair from the response.
WebHeaderCollection myWebHeaderCollection = client.ResponseHeaders;
Console.WriteLine("\nDisplaying the response headers\n");
// Loop through the ResponseHeaders and display the header name/value pairs.
for (int i = 0; i < myWebHeaderCollection.Count; i++)
Console.WriteLine("\t" + myWebHeaderCollection.GetKey(i) + " = " + myWebHeaderCollection.Get(i));
}
catch (Exception exc){
Console.WriteLine( exc.Message);
}
}
Cela fonctionne aussi aussi
string acceptEncoding = client.ResponseHeaders["Accept"].ToString();
Le code ci-dessous est très similaire à la documentation MSDN, mais j'utilise Headers
au lieu de ResponseHeaders
et je n'ai pas reçu l'exception de référence null que j'ai reçue lors de l'exécution du code MSDN. https://msdn.Microsoft.com/en-us/library/system.net.webclient.responseheaders(v=vs.110).aspx
WebClient MyClient = new WebClient();
MyClient.Headers.Add("Content-Type", "application/json");
MyClient.Headers.Add("User-Agent", "DIMS /0.1 +http://www.xxx.dk");
WebHeaderCollection myWebHeaderCollection = MyClient.Headers;
for (int i = 0; i < myWebHeaderCollection.Count; i++)
{
Console.WriteLine("\t" + myWebHeaderCollection.GetKey(i) + " = " + myWebHeaderCollection.Get(i));
}