博客园的模拟登陆(Simulated Login)

    • 查看正常情况下登录博客园时本地浏览器向博客园的服务器发送的数据
    • 依据上一步得到的由本地浏览器发送给博客园服务器的数据包内容进行模拟登陆
    • scrapy模拟登陆博客园
    • Reference

1.查看正常情况下登录博客园时本地浏览器向博客园的服务器发送的数据

首先打开博客园登录界面,填入登录用户名和密码,按快捷键 Ctrl+Alt+I 打开开发者管理器,然后点击登录 按钮,则可以在开发者管理器里看到发送的数据包内容。

数据包内容的查看位置如下图所示。

下面贴出了该数据包的内容

1.  General
    1.  Remote Address:121.199.251.55:80
    2.  Request URL:http://passport.cnblogs.com/login.aspx?ReturnUrl=http%3a%2f%2fwww.cnblogs.com%2f
    3.  Request Method:POST
    4.  Status Code:302 Found
2.  Response Headers
    1.  Cache-Control:private
    2.  Connection:keep-alive
    3.  Content-Length:140
    4.  Content-Type:text/html; charset=utf-8
    5.  Date:Sat, 28 Mar 2015 11:14:18 GMT
    6.  Location:http://www.cnblogs.com/
    7.  Set-Cookie:.DottextCookie=8D07D4D6449D629F475F84028369F871661B6C9E8F77305038D6236B5A4E3F33E1803C65D52DAD18CEDE4F4DB0B530179489D11B1F92DA7D78506AAF3570BEC0DA8C283662326F44679A88D01E09F53AA243908301C66E1617CE5B183682D93B5F7B9843AF0945B4CC825AE1A989A536F79D6C434111BF40ADE21D90A2918901BE2AC17F688B210A274DAE79; domain=.cnblogs.com; path=/; HttpOnly
    8.  Set-Cookie:SERVERID=9b2e527de1fc6430919cfb3051ec3e6c|1427541258|1427541244;Path=/
    9.  X-AspNet-Version:4.0.30319
    10. X-Powered-By:ASP.NET
    11. X-UA-Compatible:IE=10
3.  Request Headers
    1.  Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    2.  Accept-Encoding:gzip, deflate
    3.  Accept-Language:en-US,en;q=0.8
    4.  Cache-Control:max-age=0
    5.  Connection:keep-alive
    6.  Content-Length:503
    7.  Content-Type:application/x-www-form-urlencoded
    8.  Cookie:__gads=ID=5f799eb5ff8a0d1c:T=1426060996:S=ALNI_MY3SIyB9wH3MOArdyDiV2aA15B-5w; _gat=1; _ga=GA1.2.327332698.1426074473; SERVERID=9b2e527de1fc6430919cfb3051ec3e6c|1427541248|1427541244
    9.  Host:passport.cnblogs.com
    10. Origin:http://passport.cnblogs.com
    11. Referer:http://passport.cnblogs.com/login.aspx?ReturnUrl=http%3A%2F%2Fwww.cnblogs.com%2F
    12. User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
4.  Query String Parameters
    1.  ReturnUrl:http://www.cnblogs.com/
5.  Form Dataview sourceview URL encoded
    1.  __EVENTTARGET:
    2.  __EVENTARGUMENT:
    3.  __VIEWSTATE:/wEPDwUKLTM1MjEzOTU2MGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFC2Noa1JlbWVtYmVy4b/ZXiH+8FthXlmKpjSEgi7XBNU=
    4.  __VIEWSTATEGENERATOR:C2EE9ABB
    5.  __EVENTVALIDATION:/wEdAAUIqCk3Gcmu25zI9fQWqoC7hI6Xi65hwcQ8/QoQCF8JIahXufbhIqPmwKf992GTkd0wq1PKp6+/1yNGng6H71Uxop4oRunf14dz2Zt2+QKDEM3sbzJLySdZoy08+/dzW8VF2on0
    6.  tbUserName:[email protected].com
    7.  tbPassword:真实的密码
    8.  btnLogin:登 录
    9.  txtReturnUrl:http://www.cnblogs.com/

2.依据上一步得到的由本地浏览器发送给博客园服务器的数据包内容进行模拟登陆

该部分的工作就是用自己写的程序模拟本地浏览器来登陆服务器。

Python程序如下:

import time,urllib2,urllib

followeespagecontent = ""

try:
    #设置 cookie
    cookies = urllib2.HTTPCookieProcessor()
    opener = urllib2.build_opener(cookies)
    urllib2.install_opener(opener)

    #下面的数据都是从上一步得到的
    parms = {"tbUserName":"golden1314521@gmail.com","tbPassword":"真实的用户密码","__EVENTTARGET":"btnLogin","__EVENTARGUMENT":"",             "__VIEWSTATE":"/wEPDwUKLTM1MjEzOTU2MGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFC2Noa1JlbWVtYmVy4b/ZXiH+8FthXlmKpjSEgi7XBNU=",             "__EVENTVALIDATION":"/wEdAAUIqCk3Gcmu25zI9fQWqoC7hI6Xi65hwcQ8/QoQCF8JIahXufbhIqPmwKf992GTkd0wq1PKp6+/1yNGng6H71Uxop4oRunf14dz2Zt2+QKDEM3sbzJLySdZoy08+/dzW8VF2on0",             "txtReturnUrl":"http://www.cnblogs.com/"}
    loginUrl = "http://passport.cnblogs.com/login.aspx?ReturnUrl=http%3A%2F%2Fwww.cnblogs.com%2F"
    login = urllib2.urlopen(loginUrl,urllib.urlencode(parms))

    #验证是否登录成功。如果登录成功,则能读取用户的好友信息所在的页面。
    followeespage = urllib2.urlopen("http://home.cnblogs.com/followees/")
    followeespagecontent = followeespage.read().decode("utf8")

except Exception,e:
    print("登录失败")
pass

print followeespagecontent

在上面的程序中,为了验证是否成功登录博客园,我们访问了当前博客园用户的好友信息所在的页面,即http://home.cnblogs.com/followees/ ,该页面含有用户的好友信息的列表。

下面是成功登录的所得到的用户好友信息列表的内容输出:

....
<div id="main">
    <div class="avatar_list">
        <ul>

                <li>
                    <div class="avatar_pic">
                        <a href="/u/heaad/"><img src="http://pic.cnitblog.com/face/u63234.png" alt="" title="苍梧"></a>
                    </div>
                    <div class="avatar_name">
                        <a href="/u/heaad/" title="苍梧">苍梧</a>
                    </div>
.....

      <a href="http://www.cnblogs.com/AboutUS.aspx">关于博客园</a><a href="http://www.cnblogs.com/SiteMap.aspx">站点地图</a><a href="http://www.cnblogs.com/ContactUs.aspx">联系我们</a><a href="http://www.cnblogs.com/ad.aspx">广告服务</a>&copy; 2004-2015 <a href="http://www.cnblogs.com">博客园</a><span id="profiler_footer"></span>
        </div>
    </div>
</body>
</html>
.......

3.scrapy模拟登陆博客园

代码执行过程:

启动后,先执行方法 start_requests,该方法抛出一个网页爬取请求,网页地址是http://passport.cnblogs.com/login.aspx?ReturnUrl=http%3A%2F%2Fwww.cnblogs.com%2F,也就是博客园的登录界面,解析该网页的函数是post_login。postlogin方法以该方法接收到的response为基础发起请求,参数有浏览器信息headers,所填的包含用户名和密码等信息的表单信息formdata。

    headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Encoding": "gzip",
    "Accept-Language": "en-US,en;q=0.8",
    "Connection": "keep-alive",
    "Content-Type":"text/html; charset=UTF-8",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36",
    "Referer": "http://www.cnblogs.com/"
    }
    def start_requests(self):
        return [Request("http://passport.cnblogs.com/login.aspx?ReturnUrl=http%3A%2F%2Fwww.cnblogs.com%2F", meta = {‘cookiejar‘ : 1}, callback = self.post_login)]

    #FormRequeset出问题了
    def post_login(self, response):
        print ‘Preparing login‘

        #FormRequeset.from_response是Scrapy提供的一个函数, 用于post表单
        #登陆成功后, 会调用after_login回调函数
        return [FormRequest.from_response(response,
                            meta = {‘cookiejar‘ : response.meta[‘cookiejar‘]},
                            headers = self.headers,
                            formdata = {
                            "tbUserName":"[email protected]",
                            "tbPassword":"***",
                            "__EVENTTARGET":"btnLogin","__EVENTARGUMENT":"",
                            "__VIEWSTATE":"/wEPDwUKLTM1MjEzOTU2MGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFC2Noa1JlbWVtYmVy4b/ZXiH+8FthXlmKpjSEgi7XBNU=",
                            "__EVENTVALIDATION":"/wEdAAUIqCk3Gcmu25zI9fQWqoC7hI6Xi65hwcQ8/QoQCF8JIahXufbhIqPmwKf992GTkd0wq1PKp6+/1yNGng6H71Uxop4oRunf14dz2Zt2+QKDEM3sbzJLySdZoy08+/dzW8VF2on0",
                            "txtReturnUrl":"http://www.cnblogs.com/"
                            },
                            callback = self.after_login,
                            dont_filter = True
                            )]
    def after_login(self, response) :
        print "login successfully"
        #登录成功后进入页面http://home.cnblogs.com/u/jinliangjiuzhuang/
        yield self.make_requests_from_url("http://home.cnblogs.com/u/jinliangjiuzhuang/")

4. Reference

时间: 2024-08-14 12:07:42

博客园的模拟登陆(Simulated Login)的相关文章

博客园爬虫模拟

/* 原理分析: 1.通过抓包工具 分析请求地址:http://www.cnblogs.com/liuxiaoji/p/4689119.html 2.可以看出这个请求是GET请求 3.通过http请求把数据抓取回来 4.HttpHelper帮助类请联系作者购买 */ HttpHelper http = new HttpHelper(); string htmlText = http.HttpGet("http://www.cnblogs.com/liuxiaoji/p/4689119.html&

使用C#发送Http 请求实现模拟登陆(以博客园为例)

原文:使用C#发送Http 请求实现模拟登陆(以博客园为例) 模拟登陆的原理很简单,就是发送一个Http 请求服务器获得响应,然后客户端获取到cookie即可实现模拟登陆,比如一些抢票软件的原理无非也是这样模拟客户端的cookie 然后发送请求去抢票,然后12306 本文将演示如何用C# 来实现模拟登陆的,推荐一款工具Fiddler,这是一款监听http 请求的利器.废话不多说,我就以博客园为例来实现模拟登陆.首先我登陆博客园 http://passport.cnblogs.com/login.

python博客园示例,重点使用装饰器

# -*- coding:utf-8 -*- import time login_state = False user_dict = {'username': None} def register():  # 注册函数     while True:         username = input("请输入注册账号:").strip()         password = input("请输入注册密码:").strip()         with open(&

利用装饰器模拟博客园登陆

import os # 登录状态 status_dic = { 'username': None, 'status': False } flag = True # 用户名,密码 以字典形式打开 def user_pwd(): with open("user", encoding="utf-8") as f: dic = {} for i in f: li = i.strip().split("|") dic[li[0].strip()] = li

.net模拟登录博客园,使用httpWebRequest登录并发布随笔文章

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.Runtime.InteropServices; using System.Diagnostics; namespace TestHttpWebRequest { class Program { [DllImport("winine

在Python中用Request库模拟登录(二):博客园(简单加密,无验证码)

源代码分析 博客园的登录页面非常简单,查看网页源代码,可以发现两个输入框的id分别为input1.input2,复选框的id为remember_me,登录按钮的id为signin. 还有一段JavaScript代码,下面来简单分析一下. 先来看$(function(){});函数: 1 $(function () { 2 $('#signin').bind('click', function () { 3 signin_go(); 4 }).val('登 录'); 5 }); $(functio

python爬虫:两种方法模拟登录博客园

第一方法用第三方库(requests):参考http://www.mamicode.com/info-detail-1839685.html 源代码分析 博客园的登录页面非常简单,查看网页源代码,可以发现两个输入框的id分别为input1.input2,复选框的id为remember_me,登录按钮的id为signin. 还有一段JavaScript代码,下面来简单分析一下. 先来看$(function(){});函数: 1 $(function () { 2 $('#signin').bind

C# 中使用System.Net.Http.HttpClient 模拟登录博客园 (GET/POST)

一. System.Net.Http.HttpClient简介 System.Net.Http 是微软.net4.5中推出的HTTP 应用程序的编程接口, 微软称之为“现代化的 HTTP 编程接口”, 主要提供如下内容: 1. 用户通过 HTTP 使用现代化的 Web Service 的客户端组件: 2. 能够同时在客户端与服务端同时使用的 HTTP 组件(比如处理 HTTP 标头和消息), 为客户端和服务端提供一致的编程模型. 个人看来是抄袭apache http client ,目前网上用的

使用python selenium-webdriver模拟博客园登录

初学python,最近在抱着虫师的python+selenium自动化的书看,也尝试写个登录功能的验证2333 code:########################## #使用python selenium-webdriver #模拟博客园的登录流程 #首页--登录页面--跳转回首页--检查--退出登录恢复环境 ########################### from selenium import webdriver import time import sys url_cnbl