同步请求=====================================================================================

  byte[] data = System.Text.Encoding.UTF8.GetBytes("data=Hello,World~");//组建要提交的数据
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:8077/Index.aspx");
            //请求报文的参数设置
            request.Method = "post";
            request.ContentType = "application/x-www-form-urlencoded";//post请求的时候,必须加上这行代码,不然数据无法提交到目标url
 
            using (Stream requestStream = request.GetRequestStream())//请求流;有数据需要传递给目标url时候,需要把数据放在此流中
            {
                requestStream.Write(data, 0, data.Length);
            }//get类型的请求,不能有【请求流】get请求如果有参数,把参数 拼接到 url中 .create()
 
 
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();//返回流
            StreamReader sr = new StreamReader(responseStream,Encoding.UTF8);
            string result = sr.ReadToEnd();//读取流,得到String

【从服务器获取cookie】
      byte[] data = System.Text.Encoding.UTF8.GetBytes("data=Hello,World~");//组建要提交的数据
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:8077/Index.aspx");
            //请求报文的参数设置
            request.Method = "post";
            request.ContentType = "application/x-www-form-urlencoded";//post请求的时候,必须加上这行代码,不然数据无法提交到目标url
            request.CookieContainer = new CookieContainer();//请求地址,获取cookie 如 登录时的cookie
 
            using (Stream requestStream = request.GetRequestStream())//请求流;有数据需要传递给目标url时候,需要把数据放在此流中
            {
                requestStream.Write(data, 0, data.Length);
            }
 
 
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();//返回流
            StreamReader sr = new StreamReader(responseStream,Encoding.UTF8);
            string result = sr.ReadToEnd();//读取流,得到String
 
            Cookie ck = response.Cookies[0];
            if (ck!=null)
            {
                Response.Write(ck.Value); 
            }
            

 

【组建cookie提交个服务器】

 byte[] data = System.Text.Encoding.UTF8.GetBytes("data=Hello,World~");//组建要提交的数据
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:8077/Index.aspx");
            //请求报文的参数设置
            request.Method = "post";
            request.ContentType = "application/x-www-form-urlencoded";//post请求的时候,必须加上这行代码,不然数据无法提交到目标url
            request.CookieContainer = new CookieContainer();//使用cookie就需要加上此行代码
            Cookie c = new Cookie("name","zs");
            c.Domain = "localhost";//不能就加http  和端口号 只能放域名
            request.CookieContainer.Add(c);
 
            using (Stream requestStream = request.GetRequestStream())//请求流;有数据需要传递给目标url时候,需要把数据放在此流中
            {
                requestStream.Write(data, 0, data.Length);
            }
 
 
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();//返回流
            StreamReader sr = new StreamReader(responseStream,Encoding.UTF8);
            string result = sr.ReadToEnd();//读取流,得到String
 

异步请求======================================================================================

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
namespace AsynHttpWebRequest
{
    public partial class Index : System.Web.UI.Page
    {
        public string TestStr;
        protected void Page_Load(object sender, EventArgs e)
        {
            DoAsynVisist();
            TestStr = "外";
        }
 
        private void DoAsynVisist()
        {
            string data = "data=Hello World~";//模拟要传递的数据
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:8044/Index.aspx");
                request.Method = "post";
                request.ContentType = "application/x-www-form-urlencoded";//post请求的时候,必须加上这行代码,不然数据无法提交到目标url
                List<object> saveData = new List<object>() { data, request };
                request.BeginGetRequestStream(GetRequestStreamCallBack, saveData);//开始异步
            }
            catch
            {//异常处理
            }
        }
 
        private void GetRequestStreamCallBack(IAsyncResult ar)
        {
            List<object> saveData = ar.AsyncState as List<object>;//转换要传递的data,和Request对象
            string data = saveData[0] as string;//要传递的数据
            byte[] byteData = System.Text.Encoding.UTF8.GetBytes(data);
            HttpWebRequest request = (HttpWebRequest)saveData[1];
 
            Stream requestStream = request.EndGetRequestStream(ar);//请求流
            requestStream.Write(byteData, 0, byteData.Length);
            requestStream.Close();
 
            request.BeginGetResponse(GetResponseCallBack,request);//一旦使用异步处理,所有的操作方法都要配套,像这里使用BeginGetResponse而不是直接GetResponse
        }
 
        private void GetResponseCallBack(IAsyncResult ar)
        {
            HttpWebRequest request = ar.AsyncState as HttpWebRequest;
            HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(ar);
 
            Stream streamResponse = response.GetResponseStream();//返回流
            StreamReader streamRead = new StreamReader(streamResponse);
            string responseString = streamRead.ReadToEnd();//得到结果

//模拟处理 
            string filePath = AppDomain.CurrentDomain.BaseDirectory + "/Result";//System.Web.HttpContext.Current.Server.MapPath("/Result"); //HttpContext.Current.Request.MapPath("/Result");//异步这里为null
           TestStr = "内";
           File.WriteAllText(filePath + "\\" + "1.txt", responseString + TestStr);
 
            streamResponse.Close();
            streamRead.Close();
            response.Close();
        }
 
 
    }
}

HttpWebRequest的更多相关文章

  1. 利用HttpWebRequest实现实体对象的上传

    一 简介 HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对 ...

  2. C#通过WebClient/HttpWebRequest实现http的post/get方法

    C#通过WebClient/HttpWebRequest实现http的post/get方法 http://www.cnblogs.com/shadowtale/p/3372735.html

  3. C# HttpWebRequest获取COOKIES

    C# HttpWebRequest获取COOKIES byte[] bytes = Encoding.Default.GetBytes(_post); CookieContainer myCookie ...

  4. 在使用 HttpWebRequest Post数据时候返回 400错误

    笔者有一个项目中用到了上传zip并解压的功能.开始觉得很简单,因为之前曾经做过之类的上传文件的功能,所以并不为意,于是使用copy大法.正如你所料,如果一切很正常的能运行的话就不会有这篇笔记了. 整个 ...

  5. .net学习笔记----HttpRequest,WebRequest,HttpWebRequest区别

    WebRequest是一个虚类/基类,HttpWebRequest是WebRequest的具体实现 HttpRequest类的对象用于服务器端,获取客户端传来的请求的信息,包括HTTP报文传送过来的所 ...

  6. C#使用HttpWebRequest 进行请求,提示 基础连接已经关闭: 发送时发生错误。

    本人今天遇到的错误,C#使用HttpWebRequest 进行请求,提示 基础连接已经关闭: 发送时发生错误. 测试了很久,才发现,是安全协议问题,把安全协议加上就可以了

  7. C# winfrom HttpWebRequest 请求获取html网页信息和提交信息

    string result =GetRequest("http://localhost:32163/DuoBao/ajax.aspx", "time=5"); ...

  8. ASP.NET中使用HttpWebRequest调用WCF

    最近项目需要和第三网站进行数据交换,第三方网站基本都是RESTfull形式的API,但是也有的是Web Service,或者.NET里面的WCF.微软鼓励大家使用WCF替代Web Service. W ...

  9. 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端

    原文地址:http://docode.top/Article/Detail/10002 目录: 1.Http协议上传文件(以图片为例)请求报文体内容格式 2.完整版HttpWebRequest模拟上传 ...

  10. .Net(c#)模拟Http请求之HttpWebRequest封装

    一.需求: 向某个服务发起请求获取数据,如:爬虫,采集. 二.步骤(HttpWebRequest): 无非在客户端Client(即程序)设置请求报文(如:Method,Content-Type,Age ...

随机推荐

  1. [改善Java代码]慎用动态编译

    建议17: 慎用动态编译 //=========这篇博文暂时理解不透......... 动态编译一直是Java的梦想,从Java 6版本它开始支持动态编译了,可以在运行期直接编译.java文件,执行. ...

  2. The message queue

    今晚来整理一下消息队列,消息队列是一条由消息连接而成的链表,存在内核里面,通过消息对了的引用标识符来访问,每个消息队列都有一个msqid_ds结构与之对应,这个结构保存了消息队列的当前状态参数,这个结 ...

  3. hdu 4638 树状数组

    思路:将查询区间按右节点的升序排列,然后插入第i个数的时候,若nun[i]+1已经插入,那么就update(pre[num[i]+1],-1):pre[]表示的是该数的位置.同样若 num[i]-1存 ...

  4. 转: OpenResty最佳实践

    https://moonbingbing.gitbooks.io/openresty-best-practices/content/ centOS安装另加内容 ln -sf luajit-2.1.0- ...

  5. Laravel Eloquent 的条件不等于

    方法一: 使用Eloquent的where where('id', '!=' , 2) 方法二: 使用Eloquent的whereNotIn ->whereNotIn( 'id', [2]) 参 ...

  6. Ehcache(2.9.x) - API Developer Guide, Class Loading

    About Class Loading Class loading, within the plethora of environments that Ehcache can be running, ...

  7. 面试之SQL(2)--left join, inner join 和 right join的区别

    表A记录如下: aID        aName 1           a1 2           a2 3           a3 4           a4 5           a5 ...

  8. 导出Private API

    首先介绍下private API 它共分为两类: 1 在官方文档中没有呈现的API(在frameworks 下隐藏) 2 苹果明确申明不能使用的API ,在privateFrameworks 下 然后 ...

  9. 利用ADO方式连接SQLServer2008出现的问题

    在利用ADO方式连接SQLServer2008的过程中遇到了很多问题,在网上也没有找到许多有利的信息,花了两天时间,终于把所有问题都搞定了.在这里和大家分享一下经验,希望后来者能少走弯路. 很多教程说 ...

  10. C# 正则表达式(一)

    首先来复习一下正则表达式的基础知识,本篇文章分为2个部分,第一个部分复习正则表达式中的元字符和简写表达式,第二部分复习正则表达式的匹配和提取. 1.正则表达式中的元字符和简写表达式 ".&q ...