zoukankan      html  css  js  c++  java
  • C# 模拟登陆并继续访问其他页面

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading;

    namespace ConsoleApplication4
    {

    class Program
    {
    static void Main(string[] args)
    {
    //测试下面的信息在F12里都有
    HttpHeader header = new HttpHeader();
    header.accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
    header.contentType = "application/x-www-form-urlencoded";//这个F12里没有,这个一定要,这个是请求头的内容类型,不然参数无法传过去。
    header.method = "POST";
    header.userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36";
    header.maxTry = 300;

    string postString = "LoginName=admin&LoginPwd=123456";//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form里面每一个name都要加进来

    string html = HTMLHelper.GetHtml("http://localhost:12055/Admin/Home/MainForm", HTMLHelper.GetCooKie("http://localhost:12055/Admin/Login/CheckLogin", postString, header), header);

    Console.WriteLine(html);

    Console.ReadKey();
    }


    public class HTMLHelper
    {
    /// <summary>
    /// 获取CooKie
    /// </summary>
    /// <param name="loginUrl"></param>
    /// <param name="postdata"></param>
    /// <param name="header"></param>
    /// <returns></returns>
    public static CookieContainer GetCooKie(string loginUrl, string postdata, HttpHeader header)
    {
    HttpWebRequest request = null;
    HttpWebResponse response = null;
    try
    {
    CookieContainer cc = new CookieContainer();
    request = (HttpWebRequest)WebRequest.Create(loginUrl);
    request.Method = header.method;
    request.ContentType = header.contentType;
    byte[] postdatabyte = Encoding.UTF8.GetBytes(postdata);
    request.ContentLength = postdatabyte.Length;
    request.AllowAutoRedirect = false;
    request.CookieContainer = cc;
    request.KeepAlive = true;

    //提交请求
    Stream stream;
    stream = request.GetRequestStream();
    stream.Write(postdatabyte, 0, postdatabyte.Length);
    stream.Close();

    //接收响应
    response = (HttpWebResponse)request.GetResponse();
    response.Cookies = request.CookieContainer.GetCookies(request.RequestUri);

    CookieCollection cook = response.Cookies;
    //Cookie字符串格式
    string strcrook = request.CookieContainer.GetCookieHeader(request.RequestUri);

    return cc;
    }
    catch (Exception ex)
    {

    throw ex;
    }
    }

    /// <summary>
    /// 获取html
    /// </summary>
    /// <param name="getUrl"></param>
    /// <param name="cookieContainer"></param>
    /// <param name="header"></param>
    /// <returns></returns>
    public static string GetHtml(string getUrl, CookieContainer cookieContainer,HttpHeader header)
    {
    Thread.Sleep(1000);
    HttpWebRequest httpWebRequest = null;
    HttpWebResponse httpWebResponse = null;
    try
    {
    httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(getUrl);
    httpWebRequest.CookieContainer = cookieContainer;
    httpWebRequest.ContentType = header.contentType;
    httpWebRequest.ServicePoint.ConnectionLimit = header.maxTry;
    httpWebRequest.Referer = getUrl;
    httpWebRequest.Accept = header.accept;
    httpWebRequest.UserAgent = header.userAgent;
    httpWebRequest.Method = "GET";
    httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    Stream responseStream = httpWebResponse.GetResponseStream();
    StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
    string html = streamReader.ReadToEnd();
    streamReader.Close();
    responseStream.Close();
    httpWebRequest.Abort();
    httpWebResponse.Close();
    return html;
    }
    catch (Exception e)
    {
    if (httpWebRequest != null) httpWebRequest.Abort();
    if (httpWebResponse != null) httpWebResponse.Close();
    return string.Empty;
    }
    }
    }

    public class HttpHeader
    {
    public string contentType { get; set; }

    public string accept { get; set; }

    public string userAgent { get; set; }

    public string method{get;set;}

    public int maxTry { get; set; }
    }

    }
    }

  • 相关阅读:
    实用C语言技巧
    ASP.NET的适配器设计模式(Adapter)
    MongoDB的管理
    WinForm实现类似QQ停靠,显示隐藏过程添加特效效果
    dreamhappy博客索引
    Namenode的介绍
    asp.net
    学习
    采用Mono进行移动开发图书推荐
    VS2010+C#写的3D
  • 原文地址:https://www.cnblogs.com/wolf12/p/5146837.html
Copyright © 2011-2022 走看看