一:.Net中有两个类 HttpWebRequest 和HttpWebResponse 类来实现Http的请求

实现步骤:

1.通过WebRequest类创建一个HttpWebRequest的对象,该对象可以包含Http请求信息。
2.设置HttpWebRequest对象,其实就是设置Http请求报文的信息内容。
3.从HttpWebRequest对象中获取HttpWebResponse对象,该对象包含Http响应信息。
4.从响应信息中获取响应头信息和响应主体信息。

二: HTTP定义了与服务器交互的不同方法

基本方法有GET,POST,PUT,DELETE,分别对于查,该,增,删。一般情况下我们只用到GET和POST.

POST与GET的差异
1.GET是从服务器上获取数据,POST是向服务器传送数据。
2.GET是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。POST是通过HTTPPOST机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3.对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。
4.GET传送的数据量较小,不能大于2KB(这主要是因为受URL长度限制)。POST传送的数据量较大,一般被默认为不受限制。但理论上,限制取决于服务器的处理能力。
5.GET安全性较低,POST安全性较高。因为GET在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。POST的所有操作对用户来说都是不可见的。

两个简单的Get请求和Post请求

1.Get请求

  1. string strURL = "http://localhost/WinformSubmit.php?tel=11111&name=张三";
  2. System.Net.HttpWebRequest request;
  3. // 创建一个HTTP请求
  4. request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);
  5. //request.Method="get";
  6. System.Net.HttpWebResponse response;
  7. response = (System.Net.HttpWebResponse)request.GetResponse();
  8. System.IO.StreamReader myreader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8);
  9. string responseText = myreader.ReadToEnd();
  10. myreader.Close();
  11. MessageBox.Show(responseText);

2.Post请求

  1. string strURL = "http://localhost/WinformSubmit.php";
  2. System.Net.HttpWebRequest request;
  3. request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);
  4. //Post请求方式
  5. request.Method = "POST";
  6. // 内容类型
  7. request.ContentType = "application/x-www-form-urlencoded";
  8. // 参数经过URL编码
  9. string paraUrlCoded = System.Web.HttpUtility.UrlEncode("keyword");
  10. paraUrlCoded += "=" + System.Web.HttpUtility.UrlEncode("多月");
  11. byte[] payload;
  12. //将URL编码后的字符串转化为字节
  13. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  14. //设置请求的 ContentLength
  15. request.ContentLength = payload.Length;
  16. //获得请 求流
  17. System.IO.Stream writer = request.GetRequestStream();
  18. //将请求参数写入流
  19. writer.Write(payload, 0, payload.Length);
  20. // 关闭请求流
  21. writer.Close();
  22. System.Net.HttpWebResponse response;
  23. // 获得响应流
  24. response = (System.Net.HttpWebResponse)request.GetResponse();
  25. System.IO.StreamReader myreader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8);
  26. string responseText = myreader.ReadToEnd();
  27. myreader.Close();
  28. MessageBox.Show(responseText);

一个小测试

请求百度首页( http://www.baidu.com )的内容,也就是要获得百度首页的html内容。

创建HttpWebRequest请求,设置请求报文信息

  1. //请求
  2. string uri = http://www.baidu.com;
  3. HttpWebRequest request = HttpWebRequest.Create(uri) as HttpWebRequest;
  4. request.Method = "GET";                            //请求方法
  5. request.ProtocolVersion = new Version(1, 1);   //Http/1.1版本
  6. //Add Other ...

接收响应,输出响应头部信息以及主体信息

  1. HttpWebResponse response=request.GetResponse() as HttpWebResponse;
  2. //Header
  3. foreach (var item in response.Headers)
  4. {
  5. this.txt_Header.Text += item.ToString()+": " +
  6. response.GetResponseHeader  (item.ToString())
  7. + System.Environment.NewLine;
  8. }
  9. //如果主体信息不为空,则接收主体信息内容
  10. if (response.ContentLength <= 0)
  11. return;
  12. //接收响应主体信息
  13. using(Stream stream =response.GetResponseStream())
  14. {
  15. int totalLength=(int)response.ContentLength;
  16. int numBytesRead=0;
  17. byte[] bytes=new byte[totalLength+1024];
  18. //通过一个循环读取流中的数据,读取完毕,跳出循环
  19. while( numBytesRead < totalLength  )
  20. {
  21. int num=stream.Read(bytes,numBytesRead,1024);  //每次希望读取1024字节
  22. if( num==0 )   //说明流中数据读取完毕
  23. break;
  24. numBytesRead+=num;
  25. }
  26. }
  27. //将接收到的主体数据显示到界面
  28. string content=Encoding.UTF8.GetString(bytes);
  29. this.txt_Content.Text=content;

C# winform 请求http ( get , post 两种方式 )的更多相关文章

  1. C# wnform 请求http ( get , post 两种方式 )

    1.Get请求 string strURL = "http://localhost/WinformSubmit.php?tel=11111&name=张三";System. ...

  2. C# Http请求接口数据的两种方式Get and Post

    面向接口编程是一种设计思想,无论用什么语言都少不了面向接口开发思想,在软件开发过程中,常常要调用接口,接下来就是介绍C#调用其它开发商提供的接口进行获取数据,http接口方式获取接口数据. Get请求 ...

  3. (转)C# wnform 请求http ( get , post 两种方式 )

    本文转载自:http://www.cnblogs.com/hailexuexi/archive/2011/03/04/1970926.html 1.Get请求 string strURL = &quo ...

  4. WCF服务使用(IIS+Http)和(Winform宿主+Tcp)两种方式进行发布

    1.写在前面 刚接触WCF不久,有很多地方知其然不知其所以然.当我在[创建服务->发布服务->使用服务]这一过程出现过许多问题.如客户端找不到服务引用:客户端只在本机环境中才能访问服务,移 ...

  5. Android请求服务器的两种方式--post, get的区别

    android中用get和post方式向服务器提交请求_疯狂之桥_新浪博客http://blog.sina.com.cn/s/blog_a46817ff01017yxt.html Android提交数 ...

  6. [Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换

    [Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换 问题现象: 碰到一个问题,UI交互表现为:联通号码在3gwap网络环境下资源一直无法下载成功. 查看Log日志,打印出 ...

  7. 第二节:SSL证书的申请、配置(IIS通用)及跳转Https请求的两种方式

    一. 相关概念介绍 1. SSL证书服务 SSL证书服务由"服务商"联合多家国内外数字证书管理和颁发的权威机构.在xx云平台上直接提供的服务器数字证书.您可以在阿里云.腾讯云等平台 ...

  8. [Swift]Alamofire:设置网络请求超时时间【timeout】的两种方式

    两种方式作用相同,是同一套代码的两种表述. 第一种方式:集聚. 直接设置成员属性(全局属性),这种方法不能灵活修改网络请求超时时间timeout. 声明为成员属性: // MARK: - 设置为全局变 ...

  9. C#中Post请求的两种方式发送参数链和Body的

    POST请求 有两种方式 一种是组装key=value这种参数对的方式 一种是直接把一个字符串发送过去 作为body的方式 我们在postman中可以看到 sfdsafd sdfsdfds publi ...

随机推荐

  1. 【LeetCode】Path Sum II 二叉树递归

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  2. c语言中pthread的理解和使用

    在头文件中看到#typedef unsigned long int pthread_t这句话怎么理解,pthread_t是一个什么类型呢? 相当于pthread_t实际是个unsigned long  ...

  3. [Functional Programming] mapReduce over Async operations and fanout results in Pair(rejected, resolved) (fanout, flip, mapReduce)

    This post is similar to previous post. The difference is in this post, we are going to see how to ha ...

  4. ZOJ 3587 扩展KMP

    思路:这题确实大帝做得非常机智!字符串先求最长前缀,反的字符串再求一次最长前缀.然后就能够搞了. 每一个子串出现的次数就是最长前缀的次数嘛! #pragma comment(linker, " ...

  5. Python访问MongoDB数据库

    #encoding: utf-8 __author__ = 'Administrator' #import pymongo from pymongo import MongoClient,GEO2D ...

  6. iOS 怎样更新APP

    app更新的流程思想 得到当前版本currentVersion,将currentVersion与近期的版本latestVersion进行比較,若当前currentVersion较小.进行更新操作. 获 ...

  7. 栅格计算器函数之Con

    Con函数是condition(条件)的缩写,其作用 语法是: Con(条件,条件为真执行语句,条件为假执行语句[可选]) 或Con(输入栅格,条件为真执行语句,条件为假执行语句[可选],逻辑表达式) ...

  8. leetcode Wildcard Matching greedy algrithm

    The recursive program will result in TLE like this: class Solution { public: bool isMatch(const char ...

  9. Hibernate(十)HQL查询二

    一.数据库的emp名和dept表 建立持久化类和配置文件,可以用MyEclipse直接生成 持久化类 package entity; import java.util.Date; public cla ...

  10. CSS3去除手机浏览器button点击出现的高亮框

    在工作中常常遇到在手机浏览器中浏览网页时.点击页面中的button或者是具备点击事件的元素,就会出现一个默认的高亮框.影响总体的感官体验. 能够用一个简单的css3属性来解决:tap-highligh ...