web-dev-qa-db-fra.com

Comment faire une requête get HTTP avec des paramètres

Est-il possible de passer des paramètres avec une requête HTTP get? Si oui, comment devrais-je alors le faire? J'ai trouvé un HTTP post requst ( link ). Dans cet exemple, la chaîne postData est envoyée à un serveur Web. Je voudrais faire la même chose en utilisant get à la place. Google a trouvé cet exemple sur HTTP get here . Cependant, aucun paramètre n'est envoyé au serveur Web.

43
CruelIO

Dans une demande GET, vous transmettez des paramètres dans la chaîne de requête.

string url = "http://somesite.com?var=12345";
21
EndangeredMassa

Ma manière préférée est la suivante. Il gère l'échappement et l'analyse pour vous.

WebClient webClient = new WebClient();
webClient.QueryString.Add("param1", "value1");
webClient.QueryString.Add("param2", "value2");
string result = webClient.DownloadString("http://theurl.com");
115
wisbucky

La première WebClient est plus facile à utiliser; Les arguments GET sont spécifiés dans la chaîne de requête - la seule astuce consiste à ne pas oublier d'échapper aux valeurs:

        string address = string.Format(
            "http://foobar/somepage?arg1={0}&arg2={1}",
            Uri.EscapeDataString("escape me"),
            Uri.EscapeDataString("& me !!"));
        string text;
        using (WebClient client = new WebClient())
        {
            text = client.DownloadString(address);
        }
92
Marc Gravell

L'objet WebRequest semble être trop de travail pour moi. Je préfère utiliser le contrôle WebClient. 

Pour utiliser cette fonction, il vous suffit de créer deux NameValueCollections contenant vos paramètres et vos en-têtes. 

Considérons la fonction suivante:

    private static string DoGET(string URL,NameValueCollection QueryStringParameters = null, NameValueCollection RequestHeaders = null)
    {
        string ResponseText = null;
        using (WebClient client = new WebClient())
        {
            try
            {
                if (RequestHeaders != null)
                {
                    if (RequestHeaders.Count > 0)
                    {
                        foreach (string header in RequestHeaders.AllKeys)
                            client.Headers.Add(header, RequestHeaders[header]);
                    }
                }
                if (QueryStringParameters != null)
                {
                    if (QueryStringParameters.Count > 0)
                    {
                        foreach (string parm in QueryStringParameters.AllKeys)
                            client.QueryString.Add(parm, QueryStringParameters[parm]);
                    }
                }
                byte[] ResponseBytes = client.DownloadData(URL);
                ResponseText = Encoding.UTF8.GetString(ResponseBytes);
            }
            catch (WebException exception)
            {
                if (exception.Response != null)
                {
                    var responseStream = exception.Response.GetResponseStream();

                    if (responseStream != null)
                    {
                        using (var reader = new StreamReader(responseStream))
                        {
                            Response.Write(reader.ReadToEnd());
                        }
                    }
                }
            }
        }
        return ResponseText;
    }

Ajoutez vos paramètres de chaîne de requête (si nécessaire) en tant que NameValueCollection.

        NameValueCollection QueryStringParameters = new NameValueCollection();
        QueryStringParameters.Add("id", "123");
        QueryStringParameters.Add("category", "A");

Ajoutez vos en-têtes http (si nécessaire) en tant que NameValueCollection.

        NameValueCollection RequestHttpHeaders = new NameValueCollection();
        RequestHttpHeaders.Add("Authorization", "Basic bGF3c2912XBANzg5ITppc2ltCzEF");
7
Cesar

Vous pouvez également transmettre une valeur directement via une URL.

Si vous voulez appeler une méthode public static void calling(string name){....}

alors vous devriez appeler usingHttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create("http://localhost:****/Report/calling?name=Priya); webrequest.Method = "GET"; webrequest.ContentType = "application/text";

Assurez-vous simplement que vous utilisez ?Object = value dans l'URL

0
Priyanka