HttpWebRequest使用总结

HttpWebRequest的KeepAlive默认是true,如果使用的时候仅仅只是关闭流,不关闭网卡上的通道的话,第二个请求在TCP没有关闭的情况下是走同一个通道,此时本机的TCP通道就会抛异常出来,这是本机抛的错误。所以除了关闭本机的IO资源外,还要关闭网络资源。需要把KeepAlive设置成false就可以了。TCP通信结束后会自动关闭该请求所使用的通道。

request.About() 是发现异常就断掉

http是上层协议,底层还是走tcp的,如果不关闭的话,第二个http会默认走没有关闭的tcp。如果有并发的时候,数据就乱了。所以应该及时关闭tcp,每次开一个新端口。

public string PostToHttpService(string url, string jsonData, string userName, string password)

{

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

request.Method = "POST";

request.ContentType = "application/json";

request.Credentials = new NetworkCredential(userName, password);

request.Timeout = 180000;//两分钟

request.ReadWriteTimeout = 180000;//两分钟

request.KeepAlive = false;

byte[] datas = Encoding.UTF8.GetBytes(jsonData);

request.ContentLength = datas.Length;

try

{

Stream requestStream = request.GetRequestStream();

requestStream.Write(datas, 0, datas.Length);

requestStream.Close();

}

catch (System.Net.ProtocolViolationException ex)

{

request.Abort();

}

catch (System.Net.WebException ex)

{

request.Abort();

}

catch (System.ObjectDisposedException ex)

{

request.Abort();

}

catch (System.InvalidOperationException ex)

{

request.Abort();

}

catch (System.NotSupportedException ex)

{

request.Abort();

}

HttpWebResponse response = null;

string responseDatas = string.Empty;

try

{

response = (HttpWebResponse)request.GetResponse();

Stream streamResponse = response.GetResponseStream();

using (StreamReader sr = new StreamReader(streamResponse))

{

responseDatas = sr.ReadToEnd();

}

}

catch (Exception ex)

{

request.Abort();

}

finally

{

if (response != null)

{

try

{

response.Close();

}

catch {

request.Abort();

}

}

}

return responseDatas;

}

时间: 2024-10-29 19:07:48

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