HttpwebRequest的问题,大家来看看

问题描述

HttpHelps类:代码如下:///<summary>///类说明:HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式///编码日期:2011-08-20///编码人:苏飞///联系方式:361983679Email:sufei.1013@163.comBlogs:http://sufei.cnblogs.com///</summary>usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Net;usingSystem.IO;usingSystem.Text.RegularExpressions;usingSystem.IO.Compression;publicclassHttpHelps{#region预定义方法或者变更//默认的编码publicEncodingencoding=Encoding.Default;//HttpWebRequest对象用来发起请求publicHttpWebRequestrequest=null;//获取影响流的数据对象privateHttpWebResponseresponse=null;publicBooleanisToLower=true;//读取流的对象privateStreamReaderreader=null;//需要返回的数据对象privatestringreturnData="StringError";///<summary>///根据相传入的数据,得到相应页面数据///</summary>///<paramname="strPostdata">传入的数据Post方式,get方式传NUll或者空字符串都可以</param>///<returns>string类型的响应数据</returns>privatestringGetHttpRequestData(stringstrPostdata){try{//支持跳转页面,查询结果将是跳转后的页面request.AllowAutoRedirect=false;//验证在得到结果时是否有传入数据if(!string.IsNullOrEmpty(strPostdata)&&request.Method.Trim().ToLower().Contains("post")){byte[]buffer=encoding.GetBytes(strPostdata);request.ContentLength=buffer.Length;request.GetRequestStream().Write(buffer,0,buffer.Length);}////最大连接数//request.ServicePoint.ConnectionLimit=1024;#region得到请求的responseusing(response=(HttpWebResponse)request.GetResponse()){//从这里开始我们要无视编码了if(encoding==null){MemoryStream_stream=newMemoryStream();if(response.ContentEncoding!=null&&response.ContentEncoding.Equals("gzip",StringComparison.InvariantCultureIgnoreCase)){//开始读取流并设置编码方式//newGZipStream(response.GetResponseStream(),CompressionMode.Decompress).CopyTo(_stream,10240);//.net4.0以下写法_stream=GetMemoryStream(response.GetResponseStream());}else{//response.GetResponseStream().CopyTo(_stream,10240);//.net4.0以下写法_stream=GetMemoryStream(response.GetResponseStream());}byte[]RawResponse=_stream.ToArray();stringtemp=Encoding.Default.GetString(RawResponse,0,RawResponse.Length);//<meta(.*?)charset([s]?)=[^>](.*?)>Matchmeta=Regex.Match(temp,"<meta([^<]*)charset=([^<]*)["']",RegexOptions.IgnoreCase|RegexOptions.Multiline);stringcharter=(meta.Groups.Count>2)?meta.Groups[2].Value:string.Empty;charter=charter.Replace(""",string.Empty).Replace("'",string.Empty).Replace(";",string.Empty);if(charter.Length>0){encoding=Encoding.GetEncoding(charter);}else{if(response.CharacterSet.ToLower().Trim()=="iso-8859-1"){encoding=Encoding.GetEncoding("gbk");}else{if(string.IsNullOrEmpty(response.CharacterSet.Trim())){encoding=Encoding.UTF8;}else{encoding=Encoding.GetEncoding(response.CharacterSet);}}}returnData=encoding.GetString(RawResponse);}else{if(response.ContentEncoding!=null&&response.ContentEncoding.Equals("gzip",StringComparison.InvariantCultureIgnoreCase)){//开始读取流并设置编码方式using(reader=newStreamReader(newGZipStream(response.GetResponseStream(),CompressionMode.Decompress),encoding)){returnData=reader.ReadToEnd();}}else{//开始读取流并设置编码方式using(reader=newStreamReader(response.GetResponseStream(),encoding)){returnData=reader.ReadToEnd();}}}}#endregion}catch(Exception){//这里是在发生异常时返回的错误信息returnData="StringError";}if(isToLower){returnData=returnData.ToLower();}returnreturnData;}///<summary>///4.0以下.net版本取水运///</summary>///<paramname="streamResponse"></param>privatestaticMemoryStreamGetMemoryStream(StreamstreamResponse){MemoryStream_stream=newMemoryStream();intLength=256;Byte[]buffer=newByte[Length];intbytesRead=streamResponse.Read(buffer,0,Length);//writetherequiredbyteswhile(bytesRead>0){_stream.Write(buffer,0,bytesRead);bytesRead=streamResponse.Read(buffer,0,Length);}return_stream;}///<summary>///传入一个正确或不正确的URl,返回正确的URL///</summary>///<paramname="URL">url</param>///<returns></returns>publicstaticstringGetUrl(stringURL){if(!(URL.Contains("http://")||URL.Contains("https://"))){URL="http://"+URL;}returnURL;}一次不能发太多,接下面

解决方案

本帖最后由 ccttt2012 于 2012-03-27 09:30:48 编辑
解决方案二:
///<summary>///为请求准备参数///</summary>///<paramname="_URL">请求的URL地址</param>///<paramname="_Method">请求方式Get或者Post</param>///<paramname="_Accept">Accept</param>///<paramname="_ContentType">ContentType返回类型</param>///<paramname="_UserAgent">UserAgent客户端的访问类型,包括浏览器版本和操作系统信息</param>///<paramname="_Encoding">读取数据时的编码方式</param>privatevoidSetRequest(string_URL,string_Method,string_Accept,string_ContentType,string_UserAgent,Encoding_Encoding){//初始化对像,并设置请求的URL地址request=(HttpWebRequest)WebRequest.Create(GetUrl(_URL));//请求方式Get或者Postrequest.Method=_Method;//Acceptrequest.Accept=_Accept;//ContentType返回类型request.ContentType=_ContentType;//UserAgent客户端的访问类型,包括浏览器版本和操作系统信息request.UserAgent=_UserAgent;//读取数据时的编码方式encoding=_Encoding;}#endregion#region普通类型///<summary>///采用https协议GET|POST方式访问网络,根据传入的URl地址,得到响应的数据字符串。///</summary>///<paramname="_URL"></param>///<paramname="_Method">请求方式Get或者Post</param>///<paramname="_Accept">Accept</param>///<paramname="_ContentType">ContentType返回类型</param>///<paramname="_UserAgent">UserAgent客户端的访问类型,包括浏览器版本和操作系统信息</param>///<paramname="_Encoding">读取数据时的编码方式</param>///<paramname="_Postdata">只有_Method为Post方式时才需要传入值</param>///<returns>返回Html源代码</returns>publicstringGetHttpRequestString(string_URL,string_Method,string_Accept,string_ContentType,string_UserAgent,Encoding_Encoding,string_Postdata){//准备参数SetRequest(_URL,_Method,_Accept,_ContentType,_UserAgent,_Encoding);//调用专门读取数据的类returnGetHttpRequestData(_Postdata);}///<summary>///采用https协议GET方式访问网络,根据传入的URl地址,得到响应的数据字符串。///</summary>///<paramname="URL">url地址</param>///<paramname="objencoding">编码方式例如:System.Text.Encoding.UTF8;</param>///<returns>String类型的数据</returns>publicstringGetHttpRequestStringByNUll_Get(stringURL,Encodingobjencoding){//准备参数SetRequest(URL,"GET","text/html,application/xhtml+xml,*/*","text/html","Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0)",objencoding);//调用专门读取数据的类returnGetHttpRequestData("");}///<summary>///采用https协议GET方式访问网络,根据传入的URl地址,得到响应的数据字符串。///</summary>///<paramname="URL">url地址</param>///<paramname="objencoding">编码方式例如:System.Text.Encoding.UTF8;</param>///<paramname="stgrcookie">Cookie字符串</param>///<returns>String类型的数据</returns>publicstringGetHttpRequestStringByNUll_GetBycookie(stringURL,Encodingobjencoding,stringstgrcookie){//准备参数SetRequest(URL,"GET","text/html,application/xhtml+xml,*/*","text/html","Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0)",objencoding);request.Headers[HttpRequestHeader.Cookie]=stgrcookie;//调用专门读取数据的类returnGetHttpRequestData("");}///<summary>///采用https协议GET方式访问网络,根据传入的URl地址,得到响应的数据字符串。///</summary>///<paramname="URL">url地址</param>///<paramname="objencoding">编码方式例如:System.Text.Encoding.UTF8;</param>///<returns>String类型的数据</returns>publicstringGetHttpRequestStringByNUll_Get(stringURL,Encodingobjencoding,string_Accept,stringuseragent){//准备参数SetRequest(URL,"GET",_Accept,"text/html",useragent,objencoding);//调用专门读取数据的类returnGetHttpRequestData("");}///<summary>///采用https协议Post方式访问网络,根据传入的URl地址,得到响应的数据字符串。///</summary>///<paramname="URL">url地址</param>///<paramname="strPostdata">Post发送的数据</param>///<paramname="objencoding">编码方式例如:System.Text.Encoding.UTF8;</param>///<returns>String类型的数据</returns>publicstringGetHttpRequestStringByNUll_Post(stringURL,stringstrPostdata,Encodingobjencoding){//准备参数SetRequest(URL,"post","text/html,application/xhtml+xml,*/*","text/html","Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0)",objencoding);//调用专门读取数据的类returnGetHttpRequestData(strPostdata);}#endregion}我调用是privatevoidbutton1_Click(objectsender,EventArgse){HttpHelpsmyHttp=newHttpHelps();stringurl="https://accounts.google.com/ServiceLoginAuth";stringpageData=myHttp.GetHttpRequestStringByNUll_Get(url,myHttp.encoding);textBox1.Text=pageData;}不知道错在哪里,总是返回 stringerror
解决方案三:
晕了都.
解决方案四:
代码太长了.不知看哪点
解决方案五:
没太看懂啥问题,up下吧

时间: 2024-10-27 21:25:07

HttpwebRequest的问题,大家来看看的相关文章

新浪Flash下载器 [HttpWebRequest | 新浪视频]

前言      哈哈,好久不写小工具了,去年写的笨笨图片批量下载器 V0.3 beta平时还是帮了一些忙的,今天的小工具是 新浪Flash下载器 .可以直接下载swf结尾的文件,如果下载新浪视频文件,你需要右键源代码找到这个flash的伪链接,如http://music.sina.com.cn/yueku/flashPlayer.swf?vid=6851105,然后把这里连接复制到软件输入框点下载就可以了.   运行环境      1.     Microsoft .NET Framework

[C#]用HttpWebRequest加载证书建立SSL通道时发生异常的解决办法

编写者:郑昀@UltraPower 关键字:HttpWebRequest, SSL,X509Certificate dotNet  Framwork 1.1 编写时间:2005-3-29 WSE 2.0 SP3   目的: 对于用HttpWebRequest加载证书请求远端https服务器时,发生的 "基础连接已经关闭: 无法与远程服务器建立信任关系."/ "The underlying connection was closed. Could not establish a

笨笨图片批量下载器 V0.3 beta[C# | WinForm | 正则表达式 | HttpWebRequest | Async异步编程] new

前言      从[笨笨图片批量抓取下载 V0.2 beta]到[笨笨图片批量下载器 V0.3 beta]时间将近2个月,不是说这个升级版本开发了这么久,实在是懒,呵呵: )再加有时候工作忙.学习,多的时间就不愿意动了,现在都感觉辜负了上一版N多朋友的支持了,不过这将近一个星期时间我按计划完成了这个小软件版的升级开发,并且依然和上两个版本一样保持源代码开源,文章最后有下载地址,以下是这个版本相比上个版本的特点:      1.     加入图片是否重命名.      2.     加入异步线程池

使用HttpWebRequest向网站模拟上传数据

request|web|上传|数据 最近有个朋友离开IT行业二年的朋友说要实现用程序向某个网站的页面上传数据,他是意思是每天有几十条数据要在网站页面上填写,很烦,最好用程序来写.网站页面是用POST传递的,同时没有验证码之类的东东,只有一点限制就是5分种内不能填写二次记录.这一切都好办. using System.Web;using System.Net;using System.Text;using System.IO; //创建对某个网站页面的请求 HttpWebRequest  myReq

HttpWebRequest的GetRespons偶尔超时和死掉的原因及解决办法

在做一个接口的时候,部分需求时根据用户指定的Url,通过Post方式来发送数据,之前的多次调试,一直都是可以正常发送数据获取返回值,但是后来几次的调试,在没有改变代码的前提下,结果GetResponse却始终会超时死掉. 经过上网百度一共找出了下面几种原因与对应的解决办法: 1.修改DefaultConnectionLimit 为更大的值(系统默认为2) System.Net.ServicePointManager.DefaultConnectionLimit = 50; 2.在HttpWebR

Windows Phone网络HttpWebRequest的用法简介

在Windows Phone系统中,通过HttpWebRequest类可以很容易的发送网络请求,获取网络数据.HttpWebRequest是异步操作,不会堵塞主线程. 1.通过HttpWebRequest.CreateHttp()方法可以创建一个HttpWebRequest,下面代码简单实现发送一个GET请求. httpGet public void httpGet() { try { //请求地址 String url = "http://www.cnblogs.com/huizhang212

c#使用HttpWebRequest,HttpWebResponse快速验证代理IP是否有用

大家好,相信大家都使用过代理IP上过网,但是有的IP一两天就失效了.要一个一个的手工去试打开IE,关闭IE,多烦啊. 有了这篇文章就好了.我们可以使用HttpWebRequest,HttpWebResponse 来代理验证,谢谢大家评论指导! 呵呵,是不是很简单啊,其实这段代码改一下还可以做采集器,小偷等程序!我不说了大家自己看 public void yanzhen(string str, int port) { WebProxy proxyObject = new WebProxy(str,

C#中使用HttpWebRequest类调用WEB服务的示例

上一篇文章是关于 CMPP3.0 的 C# 实现,我为了测试其中的 PROVISION 接口,利用了 System.Net.HttpWebRequest 类将<MISC系统短信SP接入指南-接口改造分册>文档中的示例 xml 发送到了 WEB 服务,并从 WEB 服务返回了对应的 Resp 包(也是一段 xml),下面就将代码贴出来: 1.SyncOrderRelationReq 包的 xml 内容: <SOAP-ENV:Envelope xmlns:xsi="http://w

.NET Compact Framework下HttpWebRequest开发

当Windows Mobile程序需要使用Web Server的信息,一开始自然会想到使用WebService.可是有些Web Server不提供WebService,只是提供Http浏览功能,如果需要从Http网页中得到信息,可以使用HttpWebRequest和HttpWebResponse来完成,下面通过一个例子来讲述. 例如有一个使用ASP.net开发的燃料价格查询网站. 图1 输入燃料类型(Fuel Type)和邮政编码(Postcode)后可以查询出燃料价格,如下图. 图2 在Win

使用MemberShip时 用HttpWebRequest抓数据

最近在做一个项目,因为是分层设计,为了各层之间解耦,我们采用了HttpWebRequest来抓取同域下 的文件数据(动态生成的)来生成新的对象.我们生成数据页的handler都是以.do结尾的,以示区分.但是 这也带来了问题,在使用HttpWebRequest抓数据时,通不过验证.但是我们使用AJAX同样也是.do结尾的啊, 却可以使用,奇怪!网上找Membership的验证原理,资料及其缺乏.多是设置cookie之类的,也试了好多次,均 不奏效!事实也证明,当我们禁用cookie时,membe