图片 5

7自动登录并获取cookies

Posted by

HttpWebRequest和HttpWebResponse类是用以发送和接到HTTP数据的最佳选取。它们帮忙豆蔻年华种种立竿见影的品质。

前言

Python由于其第三方库扩充多、接口简洁、管理网页方便等原因被广泛应用于爬虫的编辑。网络爬虫的首先步便是要力所能致实今世码的全自动登入,登陆后接纳获得的cookies来做客页面。

正文使用Python2.7.13+Requests来贯彻轻巧网页的登入(不含验证码卡塔 尔(英语:State of Qatar)。

 

收获必要付出的变量

机关登入的基本原理是效仿人工填写账号密码,并向服务器进行提交,获取服务器的回应(以cookies的花样卡塔尔国。由此首先步大家需求了然在网页端登入时,浏览器向服务器交由的账号与密码的变量分别是什么样?

此处以GoogleChrome为例演示如何查看提交的账号与密码的变量名(其余浏览器肖似卡塔 尔(英语:State of Qatar):

张开要求登陆的网址,并按F12,之后选择“Network”标签(勾选“preserve
log”卡塔 尔(阿拉伯语:قطر‎如图:

图片 1

今后填入账号、密码并开展登陆,登入成功后在上边包车型大巴页面Name中式糕点击第一个,会在侧边弹出上边包车型地铁窗口,滑动到最上面可以见见Form
Data,便是浏览器向服务器POST提交的数量。自动登入正是应用程序向服务器交由这一个多少:此中userName便是输入的账号,passWord就是输入的密码。(注:假如第一步的时候不勾选“preserve
log”,在这一步中大概看不到Form Data卡塔尔

图片 2

仿照艺龙旅游网登陆

Requests依傍登入

Requests是Python中的HTTP库,能够模拟浏览器实行网址的登入与网页内容的获得。上边接纳Python代码模拟Chrome进行登陆:

import urllib

import urllib2

import requests

import re

import sys

import requests.utils

sys.path.append(“libs”)

s=requests.session()#得到会话对象

headers={‘User-Agent’:’Mozilla/5.0 (Windows NT 6.1; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78
Safari/537.36′,’Content-Type’:’application/x-www-form-urlencoded’}#安装诉求的新闻头

url=”

Data={‘userName’:’XXXXX’,’passWord’:’XXXX’}#安装央求时填写的账号密码(变量名上一步得到卡塔尔

login=s.post(url,data=Data,headers=headers)#向服务器发出POST诉求

print login.status_code#倡议的状态码

print login.url#诉求成功后跳转页面包车型客车U君越L

dict_cookies=s.cookies.get_dict()#获取cookies

print login.text#得到跳转后页面包车型地铁内容

response=s.get(afterUrl,cookies=s.cookies,headers=headers)#收获登陆后页面包车型大巴原委,在那之中afterUrl为登入后可以知道的UPRADOL

想模仿登入,首先收拾一下流程

总结

使用Python2.7举办网址的效仿登录,同一时间得到登录成功的cookies。针对含有验证码的气象暂无思忖,后续会增进含有验证码时的拍卖办法。

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

2.获取验证码(得到cookie卡塔 尔(英语:State of Qatar),登入时也亟需利用

3.登录

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

F12调出开荒职工作者具,输入顾客名,密码登陆,看我们抓到了怎么着新闻。
(此处为360浏览器卡塔 尔(阿拉伯语:قطر‎

图片 3

Request URAV4L:那么些正是登入需要的url  

方式POST

Form Data:这么些是大家要POST传输的多少:

userName=xzdylyh&passwd=12313&validateCode=验证码&rememberMe=false
 (注意此处恐怕每一个人略有不一致卡塔 尔(阿拉伯语:قطر‎

任何一些器重音讯在Request Headers中

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

我使用C# 设计的winform界面

图片 4

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已经成功重返。

图片 5

 

初稿链接:

 

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注