当前位置:   article > 正文

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

c# 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为请求的接口地址

  1. private string GetData(string url)
  2. {
  3. string result = string.Empty;
  4. string error = string.Empty;
  5. try
  6. {
  7. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  8. request.Timeout = 20000; //超时时间
  9. request.Method = "GET"; //请求方式
  10. request.KeepAlive = true; //解决GetResponse操作超时问题
  11. request.Headers.Add("Authorization", "token"); //如果接口需要鉴权, 把"token"换成自己需要的
  12. //通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换
  13. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  14. //获取响应内容,返回的数据格式: {"status":"success","msg":"成功","data":{"info": "example"}}
  15. string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
  16. //结果解析,异常情况判断
  17. JObject json = JObject.Parse(postContent);
  18. var gList = json["data"];
  19. if (json["status"] == null || gList == null || json["msg"] == null)
  20. error = "接口错误";
  21. else if (json["status"].ToString() != "success")
  22. error = string.Format("接口查询结果返回错误,{0}", json["msg"]);
  23. else if (gList.ToString() != string.Empty)
  24. result = gList["info"].ToString();
  25. else { }
  26. }
  27. catch (Exception ex)
  28. {
  29. error = ex.Message;
  30. }
  31. if (error != string.Empty)
  32. MessageBox.Show(error);
  33. return result;
  34. }

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

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

  1. private string GetUrlEncodeData(string url, Dictionary<string, string> pairs)
  2. {
  3. string result = string.Empty;
  4. string error = string.Empty;
  5. try
  6. {
  7. StringBuilder sb = new StringBuilder();
  8. foreach (string key in pairs.Keys)
  9. sb.Append(key).Append("=").Append(pairs[key]).Append("&");
  10. if (pairs.Count > 0)
  11. url = url + "?" + sb.ToString().Trim('&');
  12. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  13. request.ContentType = "application/x-www-form-urlencoded"; //表单数据(键值对)
  14. request.Timeout = 20000; //超时时间
  15. request.Method = "GET"; //请求方式
  16. request.KeepAlive = true; //解决GetResponse操作超时问题
  17. request.Headers.Add("Authorization", "token"); //如果接口需要鉴权, 把"token"换成自己需要的
  18. //通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换
  19. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  20. //获取响应内容,返回的数据格式: {"status":"success","msg":"成功","data":{"info": "example"}}
  21. string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
  22. //结果解析,异常情况判断
  23. JObject json = JObject.Parse(postContent);
  24. var gList = json["data"];
  25. if (json["status"] == null || gList == null || json["msg"] == null)
  26. error = "接口错误";
  27. else if (json["status"].ToString() != "success")
  28. error = string.Format("接口查询结果返回错误,{0}", json["msg"]);
  29. else if (gList.ToString() != string.Empty)
  30. result = gList["info"].ToString();
  31. else { }
  32. }
  33. catch (Exception ex)
  34. {
  35. error = ex.Message;
  36. }
  37. if (error != string.Empty)
  38. MessageBox.Show(error);
  39. return result;
  40. }

2.POST请求方式

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

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

  1. private string PostJsonData(string url, Dictionary<string, string> pairs)
  2. {
  3. string result = string.Empty;
  4. string error = string.Empty;
  5. try
  6. {
  7. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  8. request.Timeout = 20000; //超时时间
  9. request.Method = "POST"; //请求方式
  10. request.KeepAlive = true; //解决GetResponse操作超时问题
  11. request.Headers.Add("Authorization", "token"); //如果接口需要鉴权, 把"token"换成自己需要的
  12. //设置Content-type HTTP标头的值,即请求的媒体类型
  13. request.ContentType = "application/json"; //json字符串
  14. //request.ContentType = "multipart/form-data"; //多分部数据
  15. string content = JsonConvert.SerializeObject(pairs);
  16. byte[] data = Encoding.UTF8.GetBytes(content);
  17. //写入请求的参数
  18. using (var stream = request.GetRequestStream())
  19. stream.Write(data, 0, data.Length);
  20. //通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换
  21. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  22. //获取响应内容,返回的postContent是json字符串格式:{"status":"success","msg":"成功","data":{"info": "example"}}
  23. string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
  24. //结果解析,异常情况判断
  25. JObject json = JObject.Parse(postContent);
  26. var gList = json["data"];
  27. if (json["status"] == null || gList == null || json["msg"] == null)
  28. error = "接口错误";
  29. else if (json["status"].ToString() != "success")
  30. error = string.Format("接口查询结果返回错误,{0}", json["msg"]);
  31. else if (gList.ToString() != string.Empty)
  32. result = gList["info"].ToString();
  33. else { }
  34. }
  35. catch (Exception ex)
  36. {
  37. error = ex.Message;
  38. }
  39. if (error != string.Empty)
  40. MessageBox.Show(error);
  41. return result;
  42. }

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

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

  1. private string PostUrlEncodeData(string url, Dictionary<string, string> pairs)
  2. {
  3. string result = string.Empty;
  4. string error = string.Empty;
  5. try
  6. {
  7. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  8. request.ContentType = "application/x-www-form-urlencoded"; //表单数据(键值对)
  9. request.Timeout = 20000; //超时时间
  10. request.Method = "POST"; //请求方式
  11. request.KeepAlive = true; //解决GetResponse操作超时问题
  12. request.Headers.Add("Authorization", "token"); //如果接口需要鉴权, 把"token"换成自己需要的
  13. StringBuilder sb = new StringBuilder();
  14. foreach (string key in pairs.Keys)
  15. sb.Append(key).Append("=").Append(pairs[key]).Append("&");
  16. string content = sb.ToString().Trim('&');
  17. byte[] data = Encoding.UTF8.GetBytes(content);
  18. //写入请求的参数
  19. using (var stream = request.GetRequestStream())
  20. stream.Write(data, 0, data.Length);
  21. //通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换
  22. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  23. //获取响应内容,返回的json字符串postContent格式:
  24. //{"status":"success","msg":"成功","data":{"info": "example"}}
  25. string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
  26. //结果解析,异常情况判断
  27. JObject json = JObject.Parse(postContent);
  28. var gList = json["data"];
  29. if (json["status"] == null || gList == null || json["msg"] == null)
  30. error = "接口错误";
  31. else if (json["status"].ToString() != "success")
  32. error = string.Format("接口查询结果返回错误,{0}", json["msg"]);
  33. else if (gList.ToString() != string.Empty)
  34. result = gList["info"].ToString();
  35. else { }
  36. }
  37. catch (Exception ex)
  38. {
  39. error = ex.Message;
  40. }
  41. if (error != string.Empty)
  42. MessageBox.Show(error);
  43. return result;
  44. }

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

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

首先获取本地文件路径,

  1. string uploadURL = "http://127.0.0.1:8888/api/test/";
  2. string uploadFilePath = string.Empty;
  3. OpenFileDialog openFileDialog = new OpenFileDialog
  4. {
  5. Filter = "所有文件|*.*"
  6. };
  7. if (openFileDialog.ShowDialog() == DialogResult.OK)
  8. uploadFilePath = openFileDialog.FileName;
  9. string result = PostMultipartData(uploadURL, uploadFilePath);

上传文件函数

  1. private string PostMultipartData(string url, string filePath)
  2. {
  3. string result = string.Empty;
  4. string error = string.Empty;
  5. try
  6. {
  7. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  8. request.Timeout = 20000; //超时时间
  9. request.Method = "POST"; //请求方式
  10. request.KeepAlive = true; //解决GetResponse操作超时问题
  11. request.ContentType = "multipart/form-data"; //多分部数据(复合式表单)
  12. request.Headers.Add("Authorization", "token"); //如果接口需要鉴权, 把"token"换成自己需要的
  13. //读取文件内容
  14. FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
  15. byte[] fileData = new byte[fs.Length];
  16. fs.Read(fileData, 0, fileData.Length);
  17. string fileName = Path.GetFileName(filePath);
  18. //浏览器在发送表单的enctype="multipart/form-data", 需要在往后台发送请求的时候添加一个[boundary]属性
  19. string boundary = "test" + DateTime.Now.Ticks.ToString("x"); // 边界符, "test"可以改, 其他部分不能改
  20. byte[] boundarybytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n"); // 边界符开始
  21. byte[] endbytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); // 边界符结束
  22. //写入请求的参数
  23. using (var stream = request.GetRequestStream())
  24. {
  25. //获取文件头的字节序列
  26. string temp = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n";
  27. string header = string.Format(temp, "file", fileName);
  28. byte[] fileHeader = Encoding.UTF8.GetBytes(header);
  29. stream.Write(boundarybytes, 0, boundarybytes.Length); //写入FormData项的开始边界符
  30. stream.Write(fileHeader, 0, fileHeader.Length); //将文件头写入FormData项中
  31. stream.Write(boundarybytes, 0, boundarybytes.Length); //每两次写入之间要加入开始边界符
  32. stream.Write(fileData, 0, fileData.Length); //将文件流写入FormData项
  33. stream.Write(endbytes, 0, endbytes.Length); //写入FormData的结束边界符
  34. }
  35. //通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换
  36. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  37. //获取响应内容,返回的json字符串postContent格式:
  38. //{"status":"success","msg":"成功","data":{"info": "example"}}
  39. string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
  40. //结果解析,异常情况判断
  41. JObject json = JObject.Parse(postContent);
  42. var gList = json["data"];
  43. if (json["status"] == null || gList == null || json["msg"] == null)
  44. error = "接口错误";
  45. else if (json["status"].ToString() != "success")
  46. error = string.Format("接口查询结果返回错误,{0}", json["msg"]);
  47. else if (gList.ToString() != string.Empty)
  48. result = gList["info"].ToString();
  49. else { }
  50. }
  51. catch (Exception ex)
  52. {
  53. error = ex.Message;
  54. }
  55. if (error != string.Empty)
  56. MessageBox.Show(error);
  57. return result;
  58. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/259576
推荐阅读
相关标签
  

闽ICP备14008679号