HttpWebRequest

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

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();

}

}

}

时间: 2024-08-05 07:29:05

HttpWebRequest的相关文章

HttpWebRequest出错 服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF

服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF 主体意思是微软没有容忍不符合RFC 822中的httpHeader必须以CRLF结束的规定的服务器响应. 一个解决方案是在application.config或web.config文件里加入 <

HttpWebRequest中的ContentType详解

1.参考网络资源: http://blog.csdn.net/blueheart20/article/details/45174399  ContentType详解 http://www.tuicool.com/articles/eiauAb   Ajax的请求注意 http://www.cnblogs.com/kissdodog/archive/2013/04/06/3002779.html HttpWebRequest的详解 http://tool.oschina.net/commons 

通过HttpWebRequest调用webService

调用远端接口关键方法如下: public object InsertAuditLog(string loginLog) { //Wsdlxml(loginLog)返回wsdl的xml byte[] bs = Encoding.UTF8.GetBytes(Wsdlxml(loginLog)); HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://10.109.209.90:21010/gather/service

【整理】Asp.net HttpWebRequest和HttpWebResponse发送和接受任何类型数据

[整理]Asp.net HttpWebRequest和HttpWebResponse发送和接受任何类型数据 发送数据 //当前页面地址 string currentUrl = Request.Url.ToString(); string fileName = "复制文件"; string url = currentUrl.Substring(0, currentUrl.LastIndexOf('/')) + "/Default2.aspx?id=" + fileNa

在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需要获取认证信息(如Cookie),所以返回的是HttpWebResponse对象,有了返回的HttpWebResponse实例,可以获取登录过程中返回的会话信息,也可以获取响应流. 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text;

HttpWebRequest 和 HttpWebResponse 的应用

转载:http://www.cnblogs.com/yiki/archive/2007/08/28/872528.html HttpWebRequest request = (HttpWebRequest)WebRequest.Create(addr);// Downloads the XML file from the specified server.HttpWebResponse response = (HttpWebResponse)request.GetResponse();Syste

C# HttpWebRequest提交数据方式浅析

原文:http://developer.51cto.com/art/200909/149995.htmC# HttpWebRequest提交数据方式其实就是GET和POST两种,那么具体的实现以及操作注意事项是什么呢?那么本文就向你详细介绍C# HttpWebRequest提交数据方式的这两种利器. AD:2014WOT全球软件技术峰会北京站 课程视频发布 C# HttpWebRequest提交数据方式学习之前我们先来看看什么是HttpWebRequest,它是 .net 基类库中的一个类,在命

[解决WebClient或HttpWebRequest首次连接缓慢问题]

[编程环境]Visual Studio 2010, NET4.0 [开发语言]C#, 理论上VB.NET等依赖.NET Framework框架的语言均受此影响 [问题描述] 使用HttpWebRequest抓取网页内容,但首次请求总是莫名奇妙的阻塞在Request.GetResponse();上,不过一旦这次请求成功,后续的操作就很快了(如果是针对同一对象). 相同的代码编译在NET3.5环境中却一切正常,而在NET4.0环境中执行就出这问题,难道是一个BUG? [解决方案] 在配置文件中(.c

Asp.net HttpWebRequest和HttpWebResponse发送和接受任何类型数据

发送字符串数据发送数据 string strId = "guest"; string strPassword = "123456"; string postData = "userid=" + strId; postData += ("&password=" + strPassword); byte[] data = Encoding.UTF8.GetBytes(postData); // Prepare web re

.net模拟登录博客园,使用httpWebRequest登录并发布随笔文章

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.Runtime.InteropServices; using System.Diagnostics; namespace TestHttpWebRequest { class Program { [DllImport("winine