温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#怎么通过GET/POST方式发送Http请求

发布时间:2021-09-10 17:04:31 来源:亿速云 阅读:225 作者:chen 栏目:开发技术

这篇文章主要讲解了“C#怎么通过GET/POST方式发送Http请求”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么通过GET/POST方式发送Http请求”吧!

目录
  • 两者的区别:

    • 参数

    • 传输数据的大小

    • 安全性

  • Get请求

    • Post请求

      介绍http请求的两种方式,get和post方式。并用C#语言实现,如何请求url并获取返回的数据

      两者的区别:

      参数

      Get请求把提交的数据进行简单编码,同时将url的一部分发送到服务器
      比如url:Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB
      所以get请求方式提交的数据存在一定的安全隐患,如果在使用对安全性要求教高的操作(比如用户登录,支付),应使用post方式。Get请求是默认的http请求方法,我们一般通过get方法来获取表单数据

      POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。

      传输数据的大小

      GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。

      POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。

      安全性

      POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击

      HTTP中的GET,POST,SOAP协议都是在HTTP上运行的

      Get请求

      请求类

      ///
      /// Get请求
      /// 
      /// 
      /// 字符串
      public static string GetHttpResponse(string url, int Timeout)
      {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            request.ContentType = "text/html;charset=UTF-8";
            request.UserAgent = null;
            request.Timeout = Timeout;
      
          HttpWebResponse response = (HttpWebResponse)request.GetResponse();
          Stream myResponseStream = response.GetResponseStream();
          StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
          string retString = myStreamReader.ReadToEnd();
          myStreamReader.Close();
          myResponseStream.Close();
      
          return retString;
      }

      调用方法

      string url="Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB";
      string res = HttpHelper.GetHttpResponse(url, 6000);
      if (res != null)
      {
         T mes = JsonHelper.DeserializeJsonToObject<T>(res)
      }

      Post请求

      /// 创建POST方式的HTTP请求  
              public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int timeout, string userAgent, CookieCollection cookies)
              {
                  HttpWebRequest request = null;
                  //如果是发送HTTPS请求  
                  if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
                  {
                      request = WebRequest.Create(url) as HttpWebRequest;
                  }
                  else
                  {
                      request = WebRequest.Create(url) as HttpWebRequest;
                  }
                  request.Method = "POST";
                  request.ContentType = "application/x-www-form-urlencoded";
      
                  //设置代理UserAgent和超时
                  //request.UserAgent = userAgent;
                  //request.Timeout = timeout; 
      
                  if (cookies != null)
                  {
                      request.CookieContainer = new CookieContainer();
                      request.CookieContainer.Add(cookies);
                  }
                  //发送POST数据  
                  if (!(parameters == null || parameters.Count == 0))
                  {
                      StringBuilder buffer = new StringBuilder();
                      int i = 0;
                      foreach (string key in parameters.Keys)
                      {
                          if (i > 0)
                          {
                              buffer.AppendFormat("&{0}={1}", key, parameters[key]);
                          }
                          else
                          {
                              buffer.AppendFormat("{0}={1}", key, parameters[key]);
                              i++;
                          }
                      }
                      byte[] data = Encoding.ASCII.GetBytes(buffer.ToString());
                      using (Stream stream = request.GetRequestStream())
                      {
                          stream.Write(data, 0, data.Length);
                      }
                  }
                  string[] values = request.Headers.GetValues("Content-Type");
                  return request.GetResponse() as HttpWebResponse;
              }
      
      
          /// <summary>
          /// 获取请求的数据
          /// </summary>
          public static string GetResponseString(HttpWebResponse webresponse)
          {
              using (Stream s = webresponse.GetResponseStream())
              {
                  StreamReader reader = new StreamReader(s, Encoding.UTF8);
                  return reader.ReadToEnd();
      
              }
          }

      调用方法

      //参数p
      IDictionary<string, string> parameters = new Dictionary<string, string>();
      parameters.Add("p", HttpUtility.UrlEncode(p));
      //http请求
      System.Net.HttpWebResponse res = HttpHelper.CreatePostHttpResponse(url, parameters, 3000, null, null);
      if (res == null)
      {
          Response.Redirect("RequestFailed.aspx?result=出错了,可能是由于您的网络环境差、不稳定或安全软件禁止访问网络,您可在网络好时或关闭安全软件在重新访问网络。");
      }
      else
      {
          //获取返回数据转为字符串
         string mes = HttpHelper.GetResponseString(res);
         T model = JsonHelper.DeserializeJsonToObject<T>(mes);
      }

      感谢各位的阅读,以上就是“C#怎么通过GET/POST方式发送Http请求”的内容了,经过本文的学习后,相信大家对C#怎么通过GET/POST方式发送Http请求这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

      向AI问一下细节

      免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

      AI