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

 更新时间:2021年09月10日 16:02:36   作者:mrli113  
本文主要介绍了C#实现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# 发送Http请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# Chart绘制简单图形波形

    C# Chart绘制简单图形波形

    这篇文章主要为大家详细介绍了C# Chart绘制简单图形波形,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C#实现ComboBox控件显示出多个数据源属性的方法

    C#实现ComboBox控件显示出多个数据源属性的方法

    这篇文章主要介绍了C#实现ComboBox控件显示出多个数据源属性的方法,实例分析了ComboBox控件的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • 利用C#快速查出哪些QQ好友空间屏蔽了自己

    利用C#快速查出哪些QQ好友空间屏蔽了自己

    我们经常会遇到以下情况吧:想点击好友空间看看他最近的动态,结果发现自己需要申请权限!别担心,本文将为大家介绍如何利用C#快速查出哪些QQ好友空间屏蔽了自己,需要的可以参考一下
    2022-02-02
  • C#之如何实现真正的四舍五入

    C#之如何实现真正的四舍五入

    这篇文章主要介绍了C#之如何实现真正的四舍五入问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • C#实现类似qq的屏幕截图程序

    C#实现类似qq的屏幕截图程序

    C#实现类似qq的屏幕截图程序...
    2007-04-04
  • c#基于WinForm的Socket实现简单的聊天室 IM

    c#基于WinForm的Socket实现简单的聊天室 IM

    这篇文章主要介绍了c#基于WinForm的Socket实现简单的聊天室 IM的步骤,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-05-05
  • C#判断上传文件是否是图片以防止木马上传的方法

    C#判断上传文件是否是图片以防止木马上传的方法

    这篇文章主要介绍了C#判断上传文件是否是图片以防止木马上传的方法,对于网络安全来说至关重要,需要的朋友可以参考下
    2014-07-07
  • C#如何自动识别文件的编码

    C#如何自动识别文件的编码

    相信每位程序员在日常学习工作中,文件编码识别是必不可少的,一旦编码错误就会出现让人头疼的乱码,那么下面这篇文章将给大家介绍如何通过C#来自动识别文件的编码。文中给出了详细的示例代码,对大家的理解很有帮助,下面跟着小编一起来学习学习吧。
    2016-12-12
  • C#实现简单的计算器小程序

    C#实现简单的计算器小程序

    这篇文章主要为大家详细介绍了C#实现简单的计算器小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • c# EPPlus秘籍之Excel实现图表导出

    c# EPPlus秘籍之Excel实现图表导出

    这篇文章主要为大家介绍了c# EPPlus秘籍之Excel实现图表导出示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论