zoukankan      html  css  js  c++  java
  • ASP.NET HttpWebRequest和HttpWebResponse

    HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择。它们支持一系列有用的属性。

    模拟艺龙旅游网登录

    想模拟登录,首先整理一下流程

    1.通过360浏览器(IE,火狐等等)F12开发人员工具抓到相关数据

    2.获取验证码(拿到cookie),登录时也需要使用

    3.登录

    -------------------------------

    F12调出开发人员工具,输入用户名,密码登录,看我们抓到了什么信息。 (此处为360浏览器)

    Request URL:这个就是登录请求的url  
    https://secure.elong.com/passport/ajax/elongLogin
    方式POST

    Form Data:这个是我们要POST传输的数据:

    userName=xzdylyh&passwd=12313&validateCode=验证码&rememberMe=false  (注意此处可能每个人略有不同)

    其它一些重要信息在Request Headers中

    *****************************************************************

    我使用C# 设计的winform界面

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web;
    using System.Net;
    using System.IO;
    using System.Data;
    namespace HTTPHELPER
    {
        public  class ELOGN_LOGIN
        {
    
           public static CookieContainer container = null; //存储验证码cookie
    
            #region 登录
            public string  requestM(string uName,string passwd,string vaildate)
            {
                HttpWebRequest request = null;
                HttpWebResponse response = null;
                try
                {
                    request = (HttpWebRequest)HttpWebRequest.Create("https://secure.elong.com/passport/ajax/elongLogin");
                    request.Method = "Post";
                    request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
                    request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36";
                    request.AllowAutoRedirect = true;
                    request.CookieContainer = container;//获取验证码时候获取到的cookie会附加在这个容器里面
                    request.KeepAlive = true;//建立持久性连接
                    //整数据
                    string postData = string.Format("userName={0}&passwd={1}&validateCode={2}&rememberMe=true", uName, passwd, vaildate);
                    ASCIIEncoding encoding = new ASCIIEncoding();
                    byte[] bytepostData = encoding.GetBytes(postData);
                    request.ContentLength = bytepostData.Length;
    
                    //发送数据  using结束代码段释放
                    using (Stream requestStm = request.GetRequestStream())
                    {
                        requestStm.Write(bytepostData, 0, bytepostData.Length);
                    }
    
                    //响应
                    response = (HttpWebResponse)request.GetResponse();
                    string text = string.Empty;
                    using (Stream responseStm = response.GetResponseStream())
                    {
                        StreamReader redStm = new StreamReader(responseStm, Encoding.UTF8);
                        text = redStm.ReadToEnd();
                    }
    
                   return text;
                }
                catch (Exception ex)
                {
                    var msg = ex.Message;
                    return msg;
                }
    
            }
            #endregion 
    
            #region 获取验证码
            public Stream getCodeStream(string codeUrl)
            {
    
                //验证码请求
               HttpWebRequest request = (HttpWebRequest)WebRequest.Create(codeUrl);
                request.Method = "GET";
                request.ContentType = "application/x-www-form-urlencoded";
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1";
                request.Accept = "image/webp,*/*;q=0.8";
                request.CookieContainer = new CookieContainer();//!Very Important.!!!
                container = request.CookieContainer;
                var c = request.CookieContainer.GetCookies(request.RequestUri);
                HttpWebResponse  response = (HttpWebResponse)request.GetResponse();
                response.Cookies = container.GetCookies(request.RequestUri);
              
              Stream stream = response.GetResponseStream();
              return stream;
            }
        }
            #endregion
    }
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    using HTTPHELPER;
    namespace WindowsFormsApplication8
    {
        public partial class ELONG_LOGIN_FORM : Form
        {
            public ELONG_LOGIN_FORM()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                
                ELOGN_LOGIN elongLogin = new ELOGN_LOGIN();
                
                var rmsg = elongLogin.requestM(txtuserName.Text,txtPassword.Text,txtVaildata.Text);
                MessageBox.Show(rmsg);
            }
    
            private void ELONG_LOGIN_FORM_Load(object sender, EventArgs e)
            {
                ReflshPicImage();//更新验证码
            }
    
            //更新验证码
            public void ReflshPicImage()
            {
                string codeUrl = "https://secure.elong.com/passport/getValidateCode";
                ELOGN_LOGIN agent = new ELOGN_LOGIN();
                Stream stmImage = agent.getCodeStream(codeUrl);
                picValidate.Image = Image.FromStream(stmImage);
            }
    
            private void btnReValidate_Click(object sender, EventArgs e)
            {
                ReflshPicImage();//更新验证码
            }
    
            private void picValidate_Click(object sender, EventArgs e)
            {
                ReflshPicImage();//更新验证码
            }
        }
    }

    最后执行效果,登录的session已经成功返回。

    原文链接:https://www.cnblogs.com/yhleng/p/6728864.html

  • 相关阅读:
    打击目标
    面试中的坑,你能爬出来几个?
    [linux] 小问题:管道符,换行问题等;[nginx]启动,重启,关闭命令;以及升级nginx切换命令
    xshell下使用vim的编辑一个文件Ctrl+S和Ctrl+Q
    [PHP] 调用微博API 发微博OAuth2.0
    [YII2] 视图层过滤客户恶意代码
    [YII2] 增删改查2
    [YII2] 增删改查
    [YII2] 自带分页调整
    [JS] 自己弄得个倒计时
  • 原文地址:https://www.cnblogs.com/Liyuting/p/8144935.html
Copyright © 2011-2022 走看看