web-dev-qa-db-fra.com

WebRequest est-il le bon outil C # pour interagir avec des sites Web?

J'écris un petit outil en C # qui devra envoyer et recevoir des données à/à partir d'un site Web à l'aide de POST et JSON Formatage. Je n'ai jamais rien fait de ce genre avant le C # (ou Toute langue réellement) alors je me lance de trouver des informations utiles pour me lancer.

J'ai trouvé des informations sur la classe WebRequest en C # (spécifiquement à partir de ici ) mais avant de commencer à plonger dans celui-ci, je me suis demandé si c'était le bon outil pour le travail.

J'ai trouvé de nombreux outils pour convertir des données en format JSON, mais pas grand chose d'autre, de sorte que toute information serait vraiment utile ici au cas où je me retrouverais dans une impasse.

35
Lee

WebRequest et plus spécifiquement La classe HTTPWEBREQUEST est un bon point de départ pour ce que vous voulez réaliser. Pour créer la demande, vous utiliserez le WebRequest.create et lancera la demande créée à un httpwebrequest pour l'utiliser. Vous créerez ensuite vos données post et envoyez-la au flux comme:

HttpWebRequest req = (HttpWebRequest)
WebRequest.Create("http://mysite.com/index.php");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
string postData = "var=value1&var2=value2";
req.ContentLength = postData.Length;

StreamWriter stOut = new
StreamWriter(req.GetRequestStream(),
System.Text.Encoding.ASCII);
stOut.Write(postData);
stOut.Close();

De même, vous pouvez lire la réponse à l'aide de la méthode GetResponse qui vous permettra de lire le flux de réponses résultant et de faire ce que vous devez faire d'autre. Vous pouvez trouver plus d'informations sur la classe à:

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

27
Wolfwyrd

WebClient est parfois plus facile à utiliser que WebRequest . Vous voudrez peut-être y jeter un coup d'œil.

Pour la désérialisation JSON, vous voulez regarder la classe JavasCriPriptserializer .

Exemple de WebClient:

using (WebClient client = new WebClient ())
{
    //manipulate request headers (optional)
    client.Headers.Add (HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

    //execute request and read response as string to console
    using (StreamReader reader = new StreamReader(client.OpenRead(targetUri)))
    {
        string s = reader.ReadToEnd ();
        Console.WriteLine (s);
    }
}

marqué comme wiki au cas où quelqu'un veut mettre à jour le code

19
Eric Schoonover

Lorsqu'il s'agit de publier des données sur un site Web, system.net.httpwebrequest (la mise en œuvre spécifique à HTTP de WebRequest) est une solution parfaitement décente. Il prend en charge SSL, les demandes asynchrones et un groupe d'autres friandises, et est bien documentée sur MSDN.

La charge utile peut être n'importe quoi: les données au format JSON ou quoi que ce soit - tant que vous définissez la propriété contentType sur quelque chose que le serveur attend et comprend (application la plus probable/JSON, texte/JSON ou texte/X-JSON), tout sera amende.

Un problème potentiel lors de l'utilisation de httpwebrequest à partir d'un service système: puisqu'il utilise le IE et d'informations d'identification, le comportement par défaut peut être un peu étrange lors de l'exécution de l'utilisateur localysystem (ou fondamentalement tout compte que 'T Connectez-vous de manière interactive sur une base régulière). Définition des propriétés de proxy et d'authentification sur Nothing (ou, comme vous préférez les appeler, null, je suppose) devrait éviter cela.

1
mdb

Pour convertir de l'objet d'instance à la chaîne de JSON formatée et inversement, essayez json.net: http://json.codeplex.com/

Je l'utilise actuellement pour un projet et il est facile d'apprendre et de travailler avec et offre une certaine flexibilité en termes de convertisseurs de type Serializing et personnalisés. Il prend également en charge une syntaxe LINQ pour interroger l'entrée JSON.

0
Jay

La réponse classée actuellement la plus haute est utile, mais elle n'envoie pas ou ne reçoit pas JSON.

Voici un exemple qui utilise JSON pour l'envoi et la réception:

Comment poster un objet JSON dans le service Web

Et voici la question Stackoverflow qui m'a le plus aidé à résoudre ce problème:

problèmes d'envoi et de réception de JSON entre le service Web ASP.NET et le client Web ASP.NET

Et voici une autre question connexe:

appel JSON avec c #

0
Michael Maddox

J'ai utilisé WebRequest pour interagir avec des sites Web. C'est le bon "outil"

Je ne peux pas commenter sur l'aspect json de votre question.

0
Seb Rose