繁体   English   中英

如何发出带参数的 HTTP get 请求

[英]How to make an HTTP get request with parameters

是否可以通过HTTP get 请求传递参数? 如果是这样,我应该怎么做? 我找到了一个HTTP发帖请求(链接)。 在该示例中,字符串postData被发送到网络服务器。 我想用get来做同样的事情。 Google 在HTTP get here上找到了这个例子。 但是没有参数发送到 web 服务器。

我的首选方式是这样。 它为您处理转义和解析。

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

第一个WebClient更容易使用; 在查询字符串上指定了GET参数 - 唯一的技巧是记住转义任何值:

        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);
        }

在GET请求中,您将参数作为查询字符串的一部分传递。

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

WebRequest对象对我来说似乎太多了。 我更喜欢使用WebClient控件。

要使用此功能,您只需创建两个包含参数和请求标头的NameValueCollections。

考虑以下功能:

    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;
    }

将查询字符串参数(如果需要)添加为NameValueCollection,如下所示。

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

将您的http标头(如果需要)添加为NameValueCollection,如下所示。

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

具有多个参数的 GET 请求:

curl --request GET --url http://localhost:8080/todos/ ?limit=10&offset=2 --header 'content-type:application/json'

您也可以直接通过URL传递值。

如果要调用方法public static void calling(string name){....}

然后你应该使用HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create("http://localhost:****/Report/calling?name=Priya); webrequest.Method = "GET"; webrequest.ContentType = "application/text";调用HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create("http://localhost:****/Report/calling?name=Priya); webrequest.Method = "GET"; webrequest.ContentType = "application/text";

只需确保使用?Object = value in URL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM