• httprequest取网页数据


    public static string ReadHTML(string URL)
    ?
            {
    ?
                try
    ?
                {
    ?
                    HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(URL);
    ?
                    myReq.AllowAutoRedirect = true;
    ?
                    myReq.Timeout = 10000;//30s
    ?
                    HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
    ?
                    Stream myStream = HttpWResp.GetResponseStream();
    ?
                    myStream.ReadTimeout = 20000;
    ?
                    myStream.WriteTimeout = 20000;
    ?
                    StreamReader sr = new StreamReader(myStream, Encoding.UTF8);
    ?
                    string str = sr.ReadToEnd();
    ?
                    sr.Close();
    ?
                    myStream.Close();
    ?
                    return str;
    ?
                }
    ?
                catch
    ?
                {
    ?
                    return null;
    ?
                }
    ?
            }
     
     
    这里取网页数据是可以的,但是有些特例,怎么解决.请大家帮帮忙.
    我这里有个网站,http://vitalblogs.com/dilys/wp-signup.php我去获取它的页面信息,
    但是它重定向到了 http://vitalblogs.com/wp-signup.php  所以我获取的信息 不是 重定向后的信息,请问 应该怎么去获取重定向后的信息.
     
     
    ====================================
    成员名称 说明 
     Accepted 等效于 HTTP 状态 202。Accepted 指示请求已被接受做进一步处理。  
     Ambiguous 等效于 HTTP 状态 300。Ambiguous 指示请求的信息有多种表示形式。默认操作是将此状态视为重定向,并遵循与此响应关联的 Location 头的内容。 
    如果 HttpWebRequest.AllowAutoRedirect 属性为 false,则 Ambiguous 将导致引发异常。
     
    Ambiguous 是 MultipleChoices 的同义词。
     
     BadGateway 等效于 HTTP 状态 502。BadGateway 指示中间代理服务器从另一代理或原始服务器接收到错误响应。  
     BadRequest 等效于 HTTP 状态 400。BadRequest 指示服务器未能识别请求。如果没有其他适用的错误,或者如果不知道准确的错误或错误没有自己的错误代码,则发送 BadRequest。  
     Conflict 等效于 HTTP 状态 409。Conflict 指示由于服务器上的冲突而未能执行请求。  
     Continue 等效于 HTTP 状态 100。Continue 指示客户端可能继续其请求。  
     Created 等效于 HTTP 状态 201。Created 指示请求导致在响应被发送前创建新资源。  
     ExpectationFailed 等效于 HTTP 状态 417。ExpectationFailed 指示服务器未能符合 Expect 头中给定的预期值。  
     Forbidden 等效于 HTTP 状态 403。Forbidden 指示服务器拒绝满足请求。  
     Found 等效于 HTTP 状态 302。Found 指示请求的信息位于 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 
    如果 HttpWebRequest.AllowAutoRedirect 属性为 false,则 Found 将导致引发异常。
     
    Found 是 Redirect 的同义词。
     
     GatewayTimeout 等效于 HTTP 状态 504。GatewayTimeout 指示中间代理服务器在等待来自另一个代理或原始服务器的响应时已超时。  
     Gone 等效于 HTTP 状态 410。Gone 指示请求的资源不再可用。  
     HttpVersionNotSupported 等效于 HTTP 状态 505。HttpVersionNotSupported 指示服务器不支持请求的 HTTP 版本。  
     InternalServerError 等效于 HTTP 状态 500。InternalServerError 指示服务器上发生了一般错误。  
     LengthRequired 等效于 HTTP 状态 411。LengthRequired 指示缺少必需的 Content-length 头。  
     MethodNotAllowed 等效于 HTTP 状态 405。MethodNotAllowed 指示请求的资源上不允许请求方法(POST 或 GET)。  
     Moved 等效于 HTTP 状态 301。Moved 指示请求的信息已移到 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 
    Moved 是 MovedPermanently 的同义词。
     
     MovedPermanently 等效于 HTTP 状态 301。MovedPermanently 指示请求的信息已移到 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。 
    MovedPermanently 是 Moved 的同义词。
     
     MultipleChoices 等效于 HTTP 状态 300。MultipleChoices 指示请求的信息有多种表示形式。默认操作是将此状态视为重定向,并遵循与此响应关联的 Location 头的内容。 
    如果 HttpWebRequest.AllowAutoRedirect 属性为 false,则 MultipleChoices 将导致引发异常。
     
    MultipleChoices 是 Ambiguous 的同义词。
     
     NoContent 等效于 HTTP 状态 204。NoContent 指示已成功处理请求并且响应已被设定为无内容。  
     NonAuthoritativeInformation 等效于 HTTP 状态 203。NonAuthoritativeInformation 指示返回的元信息来自缓存副本而不是原始服务器,因此可能不正确。  
     NotAcceptable 等效于 HTTP 状态 406。NotAcceptable 指示客户端已用 Accept 头指示将不接受资源的任何可用表示形式。  
     NotFound 等效于 HTTP 状态 404。NotFound 指示请求的资源不在服务器上。  
     NotImplemented 等效于 HTTP 状态 501。NotImplemented 指示服务器不支持请求的函数。  
     NotModified 等效于 HTTP 状态 304。NotModified 指示客户端的缓存副本是最新的。未传输此资源的内容。  
     OK 等效于 HTTP 状态 200。OK 指示请求成功,且请求的信息包含在响应中。这是最常接收的状态代码。  
     PartialContent 等效于 HTTP 状态 206。PartialContent 指示响应是包括字节范围的 GET 请求所请求的部分响应。  
     PaymentRequired 等效于 HTTP 状态 402。保留 PaymentRequired 以供将来使用。  
     PreconditionFailed 等效于 HTTP 状态 412。PreconditionFailed 指示为此请求设置的条件失败,且无法执行此请求。条件是用条件请求标头(如 If-Match、If-None-Match 或 If-Unmodified-Since)设置的。  
     ProxyAuthenticationRequired 等效于 HTTP 状态 407。ProxyAuthenticationRequired 指示请求的代理要求身份验证。Proxy-authenticate 头包含如何执行身份验证的详细信息。  
     Redirect 等效于 HTTP 状态 302。Redirect 指示请求的信息位于 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 
    如果 HttpWebRequest.AllowAutoRedirect 属性为 false,则 Redirect 将导致引发异常。
     
    Redirect 是 Found 的同义词。
     
     RedirectKeepVerb 等效于 HTTP 状态 307。RedirectKeepVerb 指示请求信息位于 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。 
    如果 HttpWebRequest.AllowAutoRedirect 属性为 false,则 RedirectKeepVerb 将导致引发异常。
     
    RedirectKeepVerb 是 TemporaryRedirect 的同义词。
     
     RedirectMethod 等效于 HTTP 状态 303。作为 POST 的结果,RedirectMethod 将客户端自动重定向到 Location 头中指定的 URI。用 GET 生成对 Location 头所指定的资源的请求。 
    如果 HttpWebRequest.AllowAutoRedirect 属性为 false,则 RedirectMethod 将导致引发异常。
     
    RedirectMethod 是 SeeOther 的同义词。
     
     RequestedRangeNotSatisfiable 等效于 HTTP 状态 416。RequestedRangeNotSatisfiable 指示无法返回从资源请求的数据范围,因为范围的开头在资源的开头之前,或因为范围的结尾在资源的结尾之后。  
     RequestEntityTooLarge 等效于 HTTP 状态 413。RequestEntityTooLarge 指示请求太大,服务器无法处理。  
     RequestTimeout 等效于 HTTP 状态 408。RequestTimeout 指示客户端没有在服务器期望请求的时间内发送请求。  
     RequestUriTooLong 等效于 HTTP 状态 414。RequestUriTooLong 指示 URI 太长。  
     ResetContent 等效于 HTTP 状态 205。ResetContent 指示客户端应重置(或重新加载)当前资源。  
     SeeOther 等效于 HTTP 状态 303。作为 POST 的结果,SeeOther 将客户端自动重定向到 Location 头中指定的 URI。用 GET 生成对 Location 头所指定的资源的请求。 
    如果 HttpWebRequest.AllowAutoRedirect 属性为 false,则 SeeOther 将导致引发异常。
     
    SeeOther 是 RedirectMethod 的同义词。
     
     ServiceUnavailable 等效于 HTTP 状态 503。ServiceUnavailable 指示服务器暂时不可用,通常是由于过多加载或维护。  
     SwitchingProtocols 等效于 HTTP 状态 101。SwitchingProtocols 指示正在更改协议版本或协议。  
     TemporaryRedirect 等效于 HTTP 状态 307。TemporaryRedirect 指示请求信息位于 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。 
    如果 HttpWebRequest.AllowAutoRedirect 属性为 false,则 TemporaryRedirect 将导致引发异常。
     
    TemporaryRedirect 是 RedirectKeepVerb 的同义词。
     
     Unauthorized 等效于 HTTP 状态 401。Unauthorized 指示请求的资源要求身份验证。WWW-Authenticate 头包含如何执行身份验证的详细信息。  
     UnsupportedMediaType 等效于 HTTP 状态 415。UnsupportedMediaType 指示请求是不支持的类型。  
     Unused 等效于 HTTP 状态 306。Unused 是未完全指定的 HTTP/1.1 规范的建议扩展。  
     UseProxy 等效于 HTTP 状态 305。UseProxy 指示请求应使用位于 Location 头中指定的 URI 的代理服务器。  
     
    ==============================
    public static string ReadHTML(string URL)
            {
                try
                {
                    HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(URL);
                    myReq.AllowAutoRedirect = true;
                    myReq.Timeout = 10000;//30s
                    HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
                    if (HttpWResp.StatusCode == HttpStatusCode.Redirect)
                    {
                        
                    }
                    Stream myStream = HttpWResp.GetResponseStream();
                    myStream.ReadTimeout = 20000;
                    myStream.WriteTimeout = 20000;
                    StreamReader sr = new StreamReader(myStream, Encoding.UTF8);
                    string str = sr.ReadToEnd();
                    sr.Close();
                    myStream.Close();
                    return str;
                }
                catch
                {
                    return null;
                }
            }
     
    如果用上面这段,好像不能从服务器得到正确的返回,可能是认证没有通过,如果原先登录,系统会提示“请登录”,有没有好办法处理,非常感谢,
     
    ****************************************
    读取网络资源,返回字节数组
     
    private static byte[] getBytes(string url,CookieContainer cookie)  
    {  
        int c = url.IndexOf("/", 10);  
        byte[] data = null;  
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);  
        request.CookieContainer = cookie;  
        request.Referer = (c > 0 ? url.Substring(0, c) : url);  
        request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";  
        request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";  
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();  
        string ce = response.Headers[HttpResponseHeader.ContentEncoding];  
        int ContentLength = (int)response.ContentLength;  
        Stream s = response.GetResponseStream();  
        c = 1024 * 10;  
        if (ContentLength < 0)  
        {  
            data = new byte[c];  
            MemoryStream ms = new MemoryStream();  
            int l = s.Read(data, 0, c);  
            while (l > 0)  
            {  
                Console.WriteLine("1--> " + l);  
                ms.Write(data, 0, l);  
                l = s.Read(data, 0, c);  
            }  
            data=ms.ToArray();  
            ms.Close();  
        }  
        else  
        {  
            data = new byte[ContentLength];  
            int pos = 0;  
            while (ContentLength > 0)  
            {  
                int l = s.Read(data, pos, ContentLength);  
                pos += l;  
                ContentLength -= l;  
                Console.WriteLine("2--> " + l);  
            }  
        }  
        s.Close();  
        response.Close();  
      
        if (ce == "gzip")  
        {  
            Console.WriteLine("/n/n正在解压数据...");  
            MemoryStream js = new MemoryStream();           // 解压后的流  
            MemoryStream ms = new MemoryStream(data);       // 用于解压的流  
            GZipStream g = new GZipStream(ms, CompressionMode.Decompress);  
            byte[] buffer = new byte[c];                    // 读数据缓冲区     
            int l = g.Read(buffer, 0, c);                   // 一次读 10K     
            while (l > 0)  
            {  
                Console.WriteLine("3--> " + l);  
                js.Write(buffer, 0, l);  
                l = g.Read(buffer, 0, c);  
            }  
            g.Close();  
            ms.Close();  
            data = js.ToArray();  
            js.Close();  
        }  
        return data;  
    }  
  • 相关阅读:
    谷歌翻译插件
    WordPress资料收集,以后整理
    WordPress不同分类使用不同的文章模板
    禁用/移除WordPress页面的评论功能
    wordpress设置一个特定的页面作为首页
    wordpress主题之后台菜单编辑,小工具
    tinkcmf视频上传大小限制
    转:解决Onethink上传视频的问题 超棒的解决方案
    linux(centos) 下安装phpstudy 如何命令行进入mysql
    在 Mac OS X 10.9 搭建 Python3 科学计算环境
  • 原文地址:https://www.cnblogs.com/huapox/p/3299846.html
Copyright © 2020-2023  润新知