利用HttpRequest登录到某个网站,然后获取网站信息的程序示例 [原创]

request|程序|示例|原创

问题:有的网站的相关内容必须要在登录后才可以查看,其登录信息保存在session变量之中。这样,使用asphttp等组件就难以正确得到所要的信息。

解决:使用asp.net中的httprequest和httpresponse来实现。

要点:
1。 通过附加一个cookiecontainer到httprequest对象中,可以得到登录后返回的代表SESSION ID的COOKIE。 见Login方法
2。 将此COOKIE包含在一个cookiecontainer中并附加到另一个HTTPREQUEST请求中,则可以实现SESSION的还原。见getPage方法

源程序如下:

getHttpInfo.aspx:
<%@ Page language="c#" Codebehind="getHttpInfo.aspx.cs" AutoEventWireup="false" Inherits="PdfTest.getHttpInfo" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>WebForm1</title>
        <meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
        <meta content="C#" name="CODE_LANGUAGE">
        <meta content="JavaScript" name="vs_defaultClientScript">
        <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
        </form>
    </body>
</HTML>

getHttpInfo.aspx.cs:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
//using System.Data.OleDb;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Net;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using Microsoft.Data.Odbc;

namespace PdfTest
{
    /// <summary>
    /// Summary description for WebForm1.
    /// </summary>
    public class getHttpInfo : System.Web.UI.Page
    {
        protected static string cookieheader;

    
        private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here

            string strResult;

            if (HttpContext.Current.Application["cookieheader"] != null)
            {
                cookieheader = (string)HttpContext.Current.Application["cookieheader"];
            }
            else
            {
                //Login into the website and keep the cookie for the session in the application variable
                string strLogin = Login("http://www.thesiteyouwanttovisit/theloginpage.asp", "Action=&USERID=&Password=") ;
            }
            

            strResult = getPage("http://www.thesiteyouwanttovisit/theloginpage.asp", "Action=&data=") ;

            //Write the result to htm file
            FileStream htmFile = new FileStream("c:\save.htm", FileMode.OpenOrCreate);
            StreamWriter sw = new StreamWriter(htmFile);
            sw.Write(strResult);
            sw.Close();
            htmFile.Close();

            // output the result
            Response.Write(strResult);
        }

        public static string Login(String url, String paramList)
        {
            HttpWebResponse res = null;
            string strResult="";

            try
            {

                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                req.AllowAutoRedirect = false;
                CookieContainer cookieCon = new CookieContainer();
                req.CookieContainer = cookieCon;

                StringBuilder UrlEncoded = new StringBuilder();
                Char[] reserved = {'?', '=', '&'};
                byte[] SomeBytes = null;

                if (paramList != null)
                {
                    int i=0, j;
                    while(i<paramList.Length)
                    {
                        j=paramList.IndexOfAny(reserved, i);
                        if (j==-1)
                        {
                            UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, paramList.Length-i)));
                            break;
                        }
                        UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, j-i)));
                        UrlEncoded.Append(paramList.Substring(j,1));
                        i = j+1;
                    }
                    SomeBytes = Encoding.UTF8.GetBytes(UrlEncoded.ToString());
                    req.ContentLength = SomeBytes.Length;
                    Stream newStream = req.GetRequestStream();
                    newStream.Write(SomeBytes, 0, SomeBytes.Length);
                    newStream.Close();
                }
                else
                {
                    req.ContentLength = 0;
                }

                res = (HttpWebResponse)req.GetResponse();
                cookieheader = req.CookieContainer.GetCookieHeader(new Uri(url));
                HttpContext.Current.Application.Lock();
                HttpContext.Current.Application["cookieheader"] = cookieheader;
                HttpContext.Current.Application.UnLock();

                Stream ReceiveStream = res.GetResponseStream();
                Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
                StreamReader sr = new StreamReader( ReceiveStream, encode );
                Char[] read = new Char[256];
                int count = sr.Read( read, 0, 256 );
                while (count > 0)
                {
                    String str = new String(read, 0, count);
                    strResult += str;
                    count = sr.Read(read, 0, 256);
                }
            }
            catch(Exception e)
            {
                strResult = e.ToString();
            }
            finally
            {
                if ( res != null )
                {
                    res.Close();
                }
            }

            return strResult;
        }

        public static string getPage(String url, String paramList)
        {
            HttpWebResponse res = null;
            string strResult = "";

            try
            {

                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.Method = "POST";
                req.KeepAlive = true;
                req.ContentType = "application/x-www-form-urlencoded";
                CookieContainer cookieCon = new CookieContainer();
                req.CookieContainer = cookieCon;
                req.CookieContainer.SetCookies(new Uri(url),cookieheader);
                StringBuilder UrlEncoded = new StringBuilder();
                Char[] reserved = {'?', '=', '&'};
                byte[] SomeBytes = null;

                if (paramList != null)
                {
                    int i=0, j;
                    while(i<paramList.Length)
                    {
                        j=paramList.IndexOfAny(reserved, i);
                        if (j==-1)
                        {
                            UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, paramList.Length-i)));
                            break;
                        }
                        UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, j-i)));
                        UrlEncoded.Append(paramList.Substring(j,1));
                        i = j+1;
                    }
                    SomeBytes = Encoding.UTF8.GetBytes(UrlEncoded.ToString());
                    req.ContentLength = SomeBytes.Length;
                    Stream newStream = req.GetRequestStream();
                    newStream.Write(SomeBytes, 0, SomeBytes.Length);
                    newStream.Close();
                }
                else
                {
                    req.ContentLength = 0;
                }

                res = (HttpWebResponse)req.GetResponse();
                Stream ReceiveStream = res.GetResponseStream();
                Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
                StreamReader sr = new StreamReader( ReceiveStream, encode );
                Char[] read = new Char[256];
                int count = sr.Read( read, 0, 256 );
                while (count > 0)
                {
                    String str = new String(read, 0, count);
                    strResult += str;
                    count = sr.Read(read, 0, 256);
                }
            }
            catch(Exception e)
            {
                strResult = e.ToString();
            }
            finally
            {
                if ( res != null )
                {
                    res.Close();
                }
            }

            return strResult;
        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
        
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {    
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        

    }
}

时间: 2016-02-06

利用HttpRequest登录到某个网站,然后获取网站信息的程序示例 [原创]的相关文章

【CURL】模拟登录网站并获取用户信息

模拟登录网站并获取用户信息 前言 这次来做的是通过代码的方式,模拟登录秒拍官网,获取登录用户的信息. 前后端分离 本文的标题是CURL,传统的网站是PHP代码直接渲染项目视图,通过表单提交到控制器直接进行数据操作. 传统模拟登录的方式在页面上找到表单元素,直接进行模拟表单提交. 近两年前端技术趋于完善,实现了前后端分离. 分析页面元素 秒拍官网地址 http://www.miaopai.com/ 通过审查元素以及源代码查找,在本页面并没有form标签,由此推断页面是通过js进行提交的. 查找提交

php获取网页请求状态程序示例_php技巧

对于网页返回状态代码一般情况下我们都会去查自己网站状态码是不是200或错误页面是不是404代码,并且多数情况下我们的查看方法就是使用站长工具或ff浏览器等来查看,极少有人想到自己写一个查看状态代码的功能. 本文就此简述php获取网页请求状态程序示例如下: 方法一,使用 fsockopen(不推荐使用curl_getinfo!) 复制代码 代码如下: function get_http_code($url="localhost", $port=80, $fsock_timeout=10)

php 模拟登录网站并获取用户信息示例

前言 这次来做的是通过代码的方式,模拟登录秒拍官网,获取登录用户的信息. 前后端分离 本文的标题是CURL,传统的网站是PHP代码直接渲染项目视图,通过表单提交到控制器直接进行数据操作. 传统模拟登录的方式在页面上找到表单元素,直接进行模拟表单提交. 近两年前端技术趋于完善,实现了前后端分离. 分析页面元素 秒拍官网地址 http://www.miaopai.com/ 通过审查元素以及源代码查找,在本页面并没有form标签,由此推断页面是通过js进行提交的. 查找提交地址 由于提交的js代码可能

警方揭秘电信诈骗:黑客攻击政府网站非法获取个人信息

近日,河南省驻马店市平舆县警方成功破获一系列特大电信诈骗案,捣毁了多个诈骗团伙,这些团伙分工明确,一年之内就在全国作案2300多起,涉案资金超过3000万元. 诈骗团队是如何获取公民个人信息的?诈骗链条上各个环节的诈骗团伙成员又是如何配合作案的?随着犯罪嫌疑人相继落网,一个个疑问也随之被揭开. 黑客攻击网站 非法获取倒卖个人信息 杨某今年21岁,据他交代,他从小迷恋网络游戏,初中没有毕业就已经辍学.辍学后,杨某开始自学电脑网络知识.2015年年初,杨某开始攻击相关政府部门的网站,非法获取个人信息

利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解_javascript技巧

首先引入JavaScript API文件 <script type="text/javascript" src="http://j.maxmind.com/app/geoip.js"></script> 此API提供的接口共有6个,geoip_country_code(){国家代码},geoip_country_ name(){国家名称},geoip_city() {城市名称},geoip_region(){地区代码},geoip_latit

php实现专业获取网站SEO信息类实例_php技巧

本文实例讲述了php实现专业获取网站SEO信息类.分享给大家供大家参考.具体如下: 这个seo类的功能包括: - 检查指定的网站响应 - 获取从该网站主页的语言和其他meta标签数据的 - 获取网站的导入链接,从Alexa的流量排名 - 获取网站的导入链接,由谷歌索引的网页数量 - 获取网站的信任,从WOT排名. - 获取,因为它是第一个注册的网站域名年龄 - 获取的Twitter网站页面的数量 - 获取的Facebook链接的网站页面 - 获取网站谷歌网页速度等级 - 获取网站的谷歌网页排名

基层政府网站成僵尸网站 每天访问量仅个位数

国务院办公厅近日通报今年一季度对全国607个县级以下政府网站的抽查结果,不合格率达18.5%.2015年我国首次对政府网站进行普查,421个不合格网站中83%集中在县级以下.今年一季度的抽查结果依然反映出同样的问题. "新华视点"记者调查发现,更新不及时.信息不准确.互动不回应.服务不实用是基层政府网站的顽疾,有一些网站访问量极低,几乎成了可有可无的"空壳". 有网站连续多次抽查不合格 记者调查发现,一些基层政府网站使用率较低.记者11日17时打开河南日前通报的一家

IMDBPHP 2.1.0发布 获取电影信息PHP接口

ImdbPHP 是一个用来从IMDb.COM网站上获取电影信息的PHP接口.由于这一点,顾名思义,它主要是针对那些希望得到这部电影的信息,以延长其方案或他们网站的PHP程序员.按照IMDB/MoviePilot的版权和使用条件来使用该类. IMDBPHP 2.1.0所有的方法,现在需要再次合作.像往常一样由于网站的变化很多事情都被修正,Moviepilot代码已修正(API改变).后者现在提供了一个基本的测试套件(因为已经集成到IMDB功能).集成的数据已得到改善. 下载地址:

新手站长如何借网站日志分析网站

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 不想做好站长的站长不是好站长;不会做外链的站长不是好站长;不会分析网站日志的站长不是好站长.随着SEO工作的细化和进行,提供SEO工作的建议就显得由为重要,网站日志就是这样一种建议载体. 笔者认为网站日志可反应出网站内部的所有问题,同时也认为作为现互联网时代的站长和SEO工作者,一定要学会网站日志数据收集和分析,如果网站健康是SEO工作的第一