C# 使用WebRequest发送post和get请求

这篇具有很好参考价值的文章主要介绍了C# 使用WebRequest发送post和get请求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.get请求方式

1.1不需要请求参数时

1.2请求参数可以用表单数据(键值对)拼接时

2.POST请求方式

2.1请求参数为json字符串格式时

2.2请求参数为表单数据(键值对)格式时

2.3请求参数为多分部数据(复合式表单)格式时,(以上传文件接口为例)


本文主要介绍了通过C#中的WebRequest来发送post和get两种请求方式的过程。

1.get请求方式

1.1不需要请求参数时

url为请求的接口地址

private string GetData(string url)
{
    string result = string.Empty;
    string error = string.Empty;
    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Timeout = 20000;  //超时时间
        request.Method = "GET";  //请求方式
        request.KeepAlive = true; //解决GetResponse操作超时问题
        request.Headers.Add("Authorization", "token"); //如果接口需要鉴权, 把"token"换成自己需要的

        //通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
		
        //获取响应内容,返回的数据格式: {"status":"success","msg":"成功","data":{"info": "example"}}
        string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
        
        //结果解析,异常情况判断
        JObject json = JObject.Parse(postContent);
        var gList = json["data"];
        if (json["status"] == null || gList == null || json["msg"] == null)
            error = "接口错误";
        else if (json["status"].ToString() != "success")
            error = string.Format("接口查询结果返回错误,{0}", json["msg"]);
        else if (gList.ToString() != string.Empty)
            result = gList["info"].ToString();
        else { }
    }
    catch (Exception ex)
    {
        error = ex.Message;
    }
    if (error != string.Empty)
        MessageBox.Show(error);

    return result;
}

1.2请求参数可以用表单数据(键值对)拼接时

url为请求的接口地址,pairs为请求的参数(字典格式)

private string GetUrlEncodeData(string url, Dictionary<string, string> pairs)
{
    string result = string.Empty;
    string error = string.Empty;
    try
    {
        StringBuilder sb = new StringBuilder();
        foreach (string key in pairs.Keys)
            sb.Append(key).Append("=").Append(pairs[key]).Append("&");
        if (pairs.Count > 0)
            url = url + "?" + sb.ToString().Trim('&');

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.ContentType = "application/x-www-form-urlencoded"; //表单数据(键值对)
        request.Timeout = 20000;  //超时时间
        request.Method = "GET";  //请求方式
        request.KeepAlive = true; //解决GetResponse操作超时问题
        request.Headers.Add("Authorization", "token"); //如果接口需要鉴权, 把"token"换成自己需要的

        //通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        //获取响应内容,返回的数据格式: {"status":"success","msg":"成功","data":{"info": "example"}}
        string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
        
        //结果解析,异常情况判断
        JObject json = JObject.Parse(postContent);
        var gList = json["data"];
        if (json["status"] == null || gList == null || json["msg"] == null)
            error = "接口错误";
        else if (json["status"].ToString() != "success")
            error = string.Format("接口查询结果返回错误,{0}", json["msg"]);
        else if (gList.ToString() != string.Empty)
            result = gList["info"].ToString();
        else { }
    }
    catch (Exception ex)
    {
        error = ex.Message;
    }
    if (error != string.Empty)
        MessageBox.Show(error);

    return result;
}

2.POST请求方式

2.1请求参数为json字符串格式时

url为请求的接口地址,pairs为请求的参数(字典格式)

private string PostJsonData(string url, Dictionary<string, string> pairs)
{
    string result = string.Empty;
    string error = string.Empty;
    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Timeout = 20000;  //超时时间
        request.Method = "POST";  //请求方式
        request.KeepAlive = true; //解决GetResponse操作超时问题
        request.Headers.Add("Authorization", "token"); //如果接口需要鉴权, 把"token"换成自己需要的

        //设置Content-type HTTP标头的值,即请求的媒体类型
        request.ContentType = "application/json"; //json字符串
        //request.ContentType = "multipart/form-data"; //多分部数据

        string content = JsonConvert.SerializeObject(pairs);
        byte[] data = Encoding.UTF8.GetBytes(content);
        //写入请求的参数
        using (var stream = request.GetRequestStream())
            stream.Write(data, 0, data.Length);

        //通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        //获取响应内容,返回的postContent是json字符串格式:{"status":"success","msg":"成功","data":{"info": "example"}}
        string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
        
        //结果解析,异常情况判断
        JObject json = JObject.Parse(postContent);
        var gList = json["data"];
        if (json["status"] == null || gList == null || json["msg"] == null)
            error = "接口错误";
        else if (json["status"].ToString() != "success")
            error = string.Format("接口查询结果返回错误,{0}", json["msg"]);
        else if (gList.ToString() != string.Empty)
            result = gList["info"].ToString();
        else { }
    }
    catch (Exception ex)
    {
        error = ex.Message;
    }
    if (error != string.Empty)
        MessageBox.Show(error);

    return result;
}

2.2请求参数为表单数据(键值对)格式时

url为请求的接口地址,pairs为请求的参数(字典格式)

private string PostUrlEncodeData(string url, Dictionary<string, string> pairs)
{
    string result = string.Empty;
    string error = string.Empty;
    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.ContentType = "application/x-www-form-urlencoded"; //表单数据(键值对)
        request.Timeout = 20000;  //超时时间
        request.Method = "POST";  //请求方式
        request.KeepAlive = true; //解决GetResponse操作超时问题
        request.Headers.Add("Authorization", "token"); //如果接口需要鉴权, 把"token"换成自己需要的

        StringBuilder sb = new StringBuilder();
        foreach (string key in pairs.Keys)
            sb.Append(key).Append("=").Append(pairs[key]).Append("&");
        string content = sb.ToString().Trim('&');
        byte[] data = Encoding.UTF8.GetBytes(content);

        //写入请求的参数
        using (var stream = request.GetRequestStream())
            stream.Write(data, 0, data.Length);

        //通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        //获取响应内容,返回的json字符串postContent格式: 
        //{"status":"success","msg":"成功","data":{"info": "example"}}
        string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
        
        //结果解析,异常情况判断
        JObject json = JObject.Parse(postContent);
        var gList = json["data"];
        if (json["status"] == null || gList == null || json["msg"] == null)
            error = "接口错误";
        else if (json["status"].ToString() != "success")
            error = string.Format("接口查询结果返回错误,{0}", json["msg"]);
        else if (gList.ToString() != string.Empty)
            result = gList["info"].ToString();
        else { }
    }
    catch (Exception ex)
    {
        error = ex.Message;
    }
    if (error != string.Empty)
        MessageBox.Show(error);

    return result;
}

2.3请求参数为多分部数据(复合式表单)格式时,(以上传文件接口为例)

url为请求的接口地址,filePath为文件的绝对路径。

首先获取本地文件路径,

string uploadURL = "http://127.0.0.1:8888/api/test/";
string uploadFilePath = string.Empty;

OpenFileDialog openFileDialog = new OpenFileDialog
{
    Filter = "所有文件|*.*"
};
if (openFileDialog.ShowDialog() == DialogResult.OK)
    uploadFilePath = openFileDialog.FileName;

string result = PostMultipartData(uploadURL, uploadFilePath);

上传文件函数文章来源地址https://www.toymoban.com/news/detail-400462.html

private string PostMultipartData(string url, string filePath)
{
    string result = string.Empty;
    string error = string.Empty;
    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

        request.Timeout = 20000;  //超时时间
        request.Method = "POST";  //请求方式
        request.KeepAlive = true; //解决GetResponse操作超时问题
        request.ContentType = "multipart/form-data"; //多分部数据(复合式表单)
        request.Headers.Add("Authorization", "token"); //如果接口需要鉴权, 把"token"换成自己需要的
        
        //读取文件内容
        FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
        byte[] fileData = new byte[fs.Length];
        fs.Read(fileData, 0, fileData.Length);

        string fileName = Path.GetFileName(filePath);

        //浏览器在发送表单的enctype="multipart/form-data", 需要在往后台发送请求的时候添加一个[boundary]属性
        string boundary = "test" + DateTime.Now.Ticks.ToString("x");  // 边界符, "test"可以改, 其他部分不能改
        byte[] boundarybytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");  // 边界符开始
        byte[] endbytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");  // 边界符结束

        //写入请求的参数
        using (var stream = request.GetRequestStream())
        {
            //获取文件头的字节序列
            string temp = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n";
            string header = string.Format(temp, "file", fileName);
            byte[] fileHeader = Encoding.UTF8.GetBytes(header);

            stream.Write(boundarybytes, 0, boundarybytes.Length); //写入FormData项的开始边界符
            stream.Write(fileHeader, 0, fileHeader.Length); //将文件头写入FormData项中

            stream.Write(boundarybytes, 0, boundarybytes.Length); //每两次写入之间要加入开始边界符
            stream.Write(fileData, 0, fileData.Length);  //将文件流写入FormData项
            stream.Write(endbytes, 0, endbytes.Length);  //写入FormData的结束边界符
        }

        //通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        //获取响应内容,返回的json字符串postContent格式: 
        //{"status":"success","msg":"成功","data":{"info": "example"}}
        string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();

        //结果解析,异常情况判断
        JObject json = JObject.Parse(postContent);
        var gList = json["data"];
        if (json["status"] == null || gList == null || json["msg"] == null)
            error = "接口错误";
        else if (json["status"].ToString() != "success")
            error = string.Format("接口查询结果返回错误,{0}", json["msg"]);
        else if (gList.ToString() != string.Empty)
            result = gList["info"].ToString();
        else { }
    }
    catch (Exception ex)
    {
        error = ex.Message;
    }
    if (error != string.Empty)
        MessageBox.Show(error);

    return result;
}

到了这里,关于C# 使用WebRequest发送post和get请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言通过IXMLHTTPRequest以get或post方式发送http请求获取服务器文本或xml数据

    做过网页设计的人应该都知道ajax。 Ajax即Asynchronous Javascript And XML(异步的JavaScript和XML)。使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。 在IE浏览器中,Ajax技术就是

    2024年01月25日
    浏览(62)
  • 使用postman发送post请求,却报错不支持get请求的原因

    场景复现 可以看到我们postman发出的确实是post请求,message却报错这个接口不支持get请求,说明服务器实际上收到的是一个get请求。 产生原因分析 如果我们访问的是线上的接口,线上的nginx一般都会对http访问做一个302重定向,跳转为https访问。 如果我们正常访问一个页面,它

    2024年02月09日
    浏览(67)
  • Java 中使用 OkHttpClent 请求接口 get方式 post方式

    学习记录,不喜勿喷 一般在Java平台上,我们会使用Apache HttpClient作为Http客户端,用于发送 HTTP 请求,并对响应进行处理。比如可以使用http客户端与第三方服务(如SSO服务)进行集成,当然还可以爬取网上的数据等。OKHttp与HttpClient类似,也是一个Http客户端,提供了对 HTTP/2 和

    2024年02月12日
    浏览(57)
  • httpclient发送Get请求和Post请求

    1). 创建HttpClient对象,可以使用 HttpClients.createDefault() ; 2). 如果是无参数的GET请求,则直接使用构造方法 HttpGet(String url )创建HttpGet对象即可; 3)如果是带参数GET请求,则可以先使用 URIBuilder (String url)创建对象,再调用 addParameter (Stringparam, String value)`, 或setParameter(String param

    2024年02月06日
    浏览(63)
  • chrome 模拟发送POST请求和GET请求

    F12打开Console输入以下代码:

    2024年02月11日
    浏览(52)
  • 使用OkHttp发送POST请求的几种方式

    本文将介绍 OkHttp 客户端的基本用法。 主要介绍 OkHttp 3.x 版本中发送Post请求的几种方式。 使用 FormBody.Builder 构造基本的 RequestBody , 包含两个参数:用户名、密码,发送 POST请求。 如果要对请求进行身份验证,可以使用 Credentials.basic 构建器向请求头中添加凭据。 下面代码给

    2024年02月13日
    浏览(44)
  • HttpRequest发送网络请求POST/GET

    会返回你需要的数据,类型为String HttpRequest.get获取网络发过来的String类型的数据,如需获取里面的某一参数,需对数据进行解析。解析方式如下: 示例接收到的String类型转JSON后格式:  解析:

    2024年01月19日
    浏览(44)
  • 原生js创建get/post请求以及封装方式、axios的基本使用

    原生js创建get请求 原生js创建post请求 原生get和post封装方式1 原生get和post封装方式2 axios的基本使用

    2024年02月21日
    浏览(42)
  • curl命令行发送post/get请求

    curl 是一个命令行实用程序,允许用户 创建网络请求 curl 在 Windows 、 Linux 和 Mac 上皆可使用 一个简单的 POST 请求 -X :指定与远程服务器通信时将使用哪种 HTTP 请求方法 POST 请求传递数据 -d :设置请求参数(拼接参数或json) -H :设置request里的header -F :模拟HTTP表单数据提交

    2024年02月05日
    浏览(49)
  • Java发送HTTP GET/POST请求

    在这篇文章中,将向你展示四种发送Http的GET/POST的例子,如下: 在Java11的java.net.http.*包中,有一个HttpClient类可以完成HTTP请求。 Java11HttpClientExample.java 本例使用HttpURLConnection(http)和HttpsURLConnection(https) HttpURLConnectionExample.java 使用Apache HttpClient完成HTTP请求的发送需要添加Maven依赖

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包