1. public class HttpHelper
  2. {
  3. /// <summary>
  4. /// 创建GET方式的HTTP请求
  5. /// </summary>
  6. public static HttpWebResponse CreateGetHttpResponse(string url, int timeout, string userAgent, CookieCollection cookies)
  7. {
  8. HttpWebRequest request = null;
  9. if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
  10. {
  11. //对服务端证书进行有效性校验(非第三方权威机构颁发的证书,如自己生成的,不进行验证,这里返回true)
  12. ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
  13. request = WebRequest.Create(url) as HttpWebRequest;
  14. request.ProtocolVersion = HttpVersion.Version10; //http版本,默认是1.1,这里设置为1.0
  15. }
  16. else
  17. {
  18. request = WebRequest.Create(url) as HttpWebRequest;
  19. }
  20. request.Method = "GET";
  21.  
  22. //设置代理UserAgent和超时
  23. //request.UserAgent = userAgent;
  24. //request.Timeout = timeout;
  25. if (cookies != null)
  26. {
  27. request.CookieContainer = new CookieContainer();
  28. request.CookieContainer.Add(cookies);
  29. }
  30. return request.GetResponse() as HttpWebResponse;
  31. }
  32.  
  33. /// <summary>
  34. /// 创建POST方式的HTTP请求
  35. /// </summary>
  36. public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int timeout, string userAgent, CookieCollection cookies)
  37. {
  38. HttpWebRequest request = null;
  39. //如果是发送HTTPS请求
  40. if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
  41. {
  42. //ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
  43. request = WebRequest.Create(url) as HttpWebRequest;
  44. //request.ProtocolVersion = HttpVersion.Version10;
  45. }
  46. else
  47. {
  48. request = WebRequest.Create(url) as HttpWebRequest;
  49. }
  50. request.Method = "POST";
  51. request.ContentType = "application/x-www-form-urlencoded";
  52.  
  53. //设置代理UserAgent和超时
  54. //request.UserAgent = userAgent;
  55. //request.Timeout = timeout;
  56.  
  57. if (cookies != null)
  58. {
  59. request.CookieContainer = new CookieContainer();
  60. request.CookieContainer.Add(cookies);
  61. }
  62. //发送POST数据
  63. if (!(parameters == null || parameters.Count == 0))
  64. {
  65. StringBuilder buffer = new StringBuilder();
  66. int i = 0;
  67. foreach (string key in parameters.Keys)
  68. {
  69. if (i > 0)
  70. {
  71. buffer.AppendFormat("&{0}={1}", key, parameters[key]);
  72. }
  73. else
  74. {
  75. buffer.AppendFormat("{0}={1}", key, parameters[key]);
  76. i++;
  77. }
  78. }
  79. byte[] data = Encoding.ASCII.GetBytes(buffer.ToString());
  80. using (Stream stream = request.GetRequestStream())
  81. {
  82. stream.Write(data, 0, data.Length);
  83. }
  84. }
  85. string[] values = request.Headers.GetValues("Content-Type");
  86. return request.GetResponse() as HttpWebResponse;
  87. }
  88.  
  89. /// <summary>
  90. /// 获取请求的数据
  91. /// </summary>
  92. public static string GetResponseString(HttpWebResponse webresponse)
  93. {
  94. using (Stream s = webresponse.GetResponseStream())
  95. {
  96. StreamReader reader = new StreamReader(s, Encoding.UTF8);
  97. return reader.ReadToEnd();
  98.  
  99. }
  100. }
  101.  
  102. /// <summary>
  103. /// 验证证书
  104. /// </summary>
  105. private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
  106. {
  107. if (errors == SslPolicyErrors.None)
  108. return true;
  109. return false;
  110. }
  111. }

  

C# HTTP 请求的更多相关文章

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  3. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  4. Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

    背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...

  5. nodejs之get/post请求的几种方式

    最近一段时间在学习前端向服务器发送数据和请求数据,下面总结了一下向服务器发送请求用get和post的几种不同请求方式: 1.用form表单的方法:(1)get方法 前端代码: <form act ...

  6. ajax异步请求

    做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...

  7. C# MVC 5 - 生命周期(应用程序生命周期&请求生命周期)

    本文是根据网上的文章总结的. 1.介绍 本文讨论ASP.Net MVC框架MVC的请求生命周期. MVC有两个生命周期,一为应用程序生命周期,二为请求生命周期. 2.应用程序生命周期 应用程序生命周期 ...

  8. nodejs进阶(5)—接收请求参数

    1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...

  9. 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...

  10. [转]利用URLConnection来发送POST和GET请求

    URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...

随机推荐

  1. oracle nologging用法

    一.oracle日志模式分为(logging,force logging,nologging) 默认情况是logging,就是会记录到redo日志中,force logging是强制记录日志,nolo ...

  2. codeforce 621C Wet Shark and Flowers

    题意:输入个n和质数p,n个区间,每个区间可以等概率的任选一个数,如果选的这个区间和它下个区间选的数的积是p的倍数的话(n的下个是1),就挣2000,问挣的期望 思路:整体的期望可以分成每对之间的期望 ...

  3. 搭建Windows Azure开发环境-环境搭建

    虚拟机中运行 练习1:使用远程桌面连接到虚拟机 在本节中,你会登录到Windows Azure的门户网站,并使用Windows Azure库创建的Azure虚拟机. 任务1 -配置的Visual St ...

  4. (原)Struts 相关资源下载

    官网:http://struts.apache.org 点击[Download],进入页面如下,可以看到下载的资源: 点击[struts-2.3.20-all.zip],就能获取Struts2项目所有 ...

  5. system partition table

    转载内容 摘录部分我的笔记的中doc,和大家一起感受Oracle 11g在分区方面的增强--System Partitioning 系统分区的特点 ●系统分区与其他分区相比,一个最根本的区别就是不需要 ...

  6. NSThread常见方法

    // CACurrentMediaTime:获取绝对时间:从新世纪到现在的绝对时间,常用来计算耗时操作的时间差(结束时间 - 开始时间) double start = CACurrentMediaTi ...

  7. 多点触控之MotionEvent.ACTION_MASK作用

    ACTION_MASK在Android中是应用于多点触摸操作,字面上的意思大概是动作掩码的意思吧. 在onTouchEvent(MotionEvent event)中,使用switch (event. ...

  8. LIMS系统供应商一览表

    LIMS系统供应商一览表. 国内自主研发的LIMS供应商的产品质量一般,国外的LIMS产品在本土化方面,北京三维天地的质量最佳. LIMS系统JAVA..Net平台上都有,由于实验室业务数据量等原因, ...

  9. 【转】Java Thread.join()详解

    http://www.open-open.com/lib/view/open1371741636171.html 一.使用方式. join是Thread类的一个方法,启动线程后直接调用,例如: ? 1 ...

  10. 分页存储过程--From:桌面备份 -> sql2005新功能.docx

    二.以下示例将返回行号为 50 到 60(含)的行,并以 OrderDate 排序. USE AdventureWorks; GO WITH OrderedOrders AS (SELECT Sale ...