【C#、csharp】HTTPGET,POST请求

摘要:
您可以获取重定向地址请求。头的Location属性中的AllowAutoRedirect=false;string[]values=request.Headers.GetValues(“Location”);///在GET模式下创建HTTP请求///<

HTTP定义了与服务器交互的不同方法,基本方法有GET,POST,PUT,DELETE,分别对于查,该,增,删。一般情况下我们只用到GET和POST,其他两种都也可以用GET和POST来实现,很多浏览器也只实现了GET和POST两种方法

  GET:用户获取信息

    安全的:不会对服务器上的数据进行修改,和破坏

    幂等的:相同的请求所返回的结果相同

    参数是通过Url来传输,接在Url后面中间用?分开,不同参数之间用&分开,下面表示传递两个参数param1和param2,值为value1和value2

      http://songurl/index.htm?param1=value1&param2=value2

    通过上面可以看到,GET请求数据在隐私方面又是不安全的,因为Url上的信息可以直接让用户看到,这样不利于隐私保护

  POST:用于更新数据

    传递的数据对用户隐藏,封装在包里,具体看演示

    有时候请求会重定向,但我们就需要从重定向url获取东西,这时可以设置重定向禁用,你就可以从headers的Location属性中获取重定向地址

      request.AllowAutoRedirect = false;

      string[] values = request.Headers.GetValues("Location");

下面是辅助类的定义

复制代码
        public class HttpHelper
        {
            /// <summary>  
            /// 创建GET方式的HTTP请求  
            /// </summary>  
            public static HttpWebResponse CreateGetHttpResponse(string url, int timeout, string userAgent, CookieCollection cookies)
            {
                HttpWebRequest request = null;
                if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
                {
                    //对服务端证书进行有效性校验(非第三方权威机构颁发的证书,如自己生成的,不进行验证,这里返回true)
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                    request = WebRequest.Create(url) as HttpWebRequest;
                    request.ProtocolVersion = HttpVersion.Version10;    //http版本,默认是1.1,这里设置为1.0
                }
                else
                {
                    request = WebRequest.Create(url) as HttpWebRequest;
                }
                request.Method = "GET";
                
                //设置代理UserAgent和超时
                //request.UserAgent = userAgent;
                //request.Timeout = timeout;
                if (cookies != null)
                {
                    request.CookieContainer = new CookieContainer();
                    request.CookieContainer.Add(cookies);
                }
                return request.GetResponse() as HttpWebResponse;
            }
            
            /// <summary>  
            /// 创建POST方式的HTTP请求  
            /// </summary>  
            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))
                {
                    //ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                    request = WebRequest.Create(url) as HttpWebRequest;
                    //request.ProtocolVersion = HttpVersion.Version10;
                }
                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();

                }
            }
            
            /// <summary>
            /// 验证证书
            /// </summary>
            private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {
                if (errors == SslPolicyErrors.None)
                    return true;
                return false;
            }  
        }
复制代码

免责声明:文章转载自《【C#、csharp】HTTPGET,POST请求》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇centos 7.4 u盘安装Appcan、apicloud、HBuilder 不同之处解析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

浅析Java8新特性-Stream流操作:Stream概念、常见中间/终止操作符、创建stream的3种方式、串行流/并行流的区分、使用示例(遍历/匹配、过滤、聚合、映射、归约、归集、统计、分区分组、接合、排序、组合/提取、分页、并行、集合转Map、使用并行流注意点)

一、Java 8 Stream 介绍   Java8 API 添加了一个新的抽象称为 流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。   Stream 这种风格将要处理的元素集合看作一种流,在流的过程中,流在管道中传输, 并且可以在管道...

OpenTelemetry架构介绍

OpenTelemetry: 经得起考验的工具 摘自:https://blog.newrelic.com/product-news/what-is-opentelemetry/ 目录 OpenTelemetry: 经得起考验的工具 什么是OpenTelemetry?术语 OpenTelemetry的好处 如何使用OpenTelemetry Op...

c#socket发送邮件详解

本文来自http://blog.csdn.net/gaooo/article/details/2027145 邮件发送在web应用中是屡见不鲜的,在asp时代大家多是利用一些第三方提供的组件如JMAIL、ASPMAIL等进行邮件发送。自从微软推出 Asp.net后,很多程序员开始转向采用C#作为主要的开发语言。asp.net提供了更加强大的功能,同时也提供...

在微信小程序中绘制图表(part2)

本期大纲 1、确定纵坐标的范围并绘制 2、根据真实数据绘制折线 相关阅读:在微信小程序中绘制图表(part1)在微信小程序中绘制图表(part3) 关注我的 github 项目 查看完整代码。 确定纵坐标的范围并绘制 为了避免纵坐标的刻度出现小数的情况,我们把纵坐标分为5个区块,我们取最小单位刻度为例如10(能够被5整除),当然真实情况会比这复杂,待...

okhttp同步异步下载文件,与http请求工具类

<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.8.0</ve...

Java IO系列之一:IO

1. 概述  Java IO一般包含两个部分:   1.java.io包中堵塞型IO;   2.java.nio包中的非堵塞型IO,通常称为New IO。 java.io包下,分为四大块近80个类: 1、基于字节操作的I/O接口:InputStream和OutputStream 2、基于字符操作的I/O接口:Writer和Reader 3、基于磁盘操作的I...