转自原文 【C#】HTTP请求GET,POST

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 == ))
{
StringBuilder buffer = new StringBuilder();
int i = ;
foreach (string key in parameters.Keys)
{
if (i > )
{
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, , 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;
}
}

最新文章

  1. java编译期优化
  2. 还是畅通工程(MST)
  3. Visual studio 2013安装及单元测试
  4. Multithreading annd Grand Central Dispatch on ios for Beginners Tutorial-多线程和GCD的入门教程
  5. 【M31】让函数根据一个以上的对象类型来决定如何虚化
  6. hdu-5505(数论)
  7. UVa 10465 Homer Simpson (枚举)
  8. tools_list
  9. 【数据库】数据库的锁机制,MySQL中的行级锁,表级锁,页级锁
  10. ORA-19566: exceeded limit of 0 corrupt blocks for file E:\xxxx\&lt;datafilename&gt;.ORA.
  11. mysql之 事务prepare 与 commit 阶段分析
  12. 公众号开发之wx-tools+springboot应用实战-音乐爬虫推送[JAVA]
  13. PyQt5--GridLayoutMultiLine
  14. php Closure::bind的用法(转)
  15. 初识WCF6
  16. 安装在Ubuntu上的Python虚拟环境
  17. Make Docker Image On Ubuntu17.10
  18. startup ORA-00845: MEMORY_TARGET not supported on this system
  19. HDU2389:Rain on your Parade(二分图最大匹配+HK算法)
  20. 我理解的关于Vue.nextTick()的正确使用

热门文章

  1. Linux之Ubuntu
  2. MySQL性能指标计算方式
  3. BZOJ4036:按位或 (min_max容斥&amp;高维前缀和)
  4. 日志组件logback的介绍及配置使用方法(一)
  5. cordova学习-基础篇
  6. 20179223《Linux内核原理与分析》第十周学习笔记
  7. Roslyn 的确定性构建
  8. vb编写串口调试程序
  9. jsp中取两位小数
  10. 阿里云SLB快速切换至https