上次写了篇文章,内容是如何利用WebClient模拟登陆CSRF控制的网站,回复中有人还是不理解,现在另开一篇,打算说说用Python如何来登陆。

开写之前,先说下为什么webrequest不行,常规情况下,我们在利用webrequest的时候,都是如下的形式:

 string url = "loginurl";
StringBuilder sb = new StringBuilder();
sb.Append("username=un");
sb.Append("&password=up");
sb.Append("&service=sv");
HttpWebRequest requestget = (HttpWebRequest)WebRequest.Create(url);
byte[] postData = Encoding.UTF8.GetBytes(sb.ToString());
using (Stream stream = requestget.GetRequestStream())
{
stream.Write(postData, , postData.Length);
}
WebResponse reponse1 = requestget.GetResponse();
StreamReader sr2 = new StreamReader(reponse1.GetResponseStream(), Encoding.UTF8);
string html2 = sr2.ReadToEnd();

可关键是我们POST过去的数据并没有服务器所认可的CSRF值,在GetResponse处就会报错,要是我们在上面第六行后面添加如下代码:

 WebResponse reponseget = requestget.GetResponse();
StreamReader sr = new StreamReader(reponseget.GetResponseStream(), Encoding.UTF8);
string html = sr.ReadToEnd();
string regx = "<input type=\"hidden\" id=\"lt\" name=\"lt\" value=\"(?<PID>\\S+?)\" />";
string token = Regex.Match(html, regx).Groups[].Value;
sb.Append("&lt=" + token);

先获得其值,并加入到postdata的stringbuild中,其它不变,当执行到GetRequestStream的时候,会报System.Net.ProtocolViolationException的错误,此时如果你重新create一个httpwebrequest又会导致csrf值失效。这些就是在模拟登陆具有CSRF保护网站时碰到的问题,所以才有第一篇文章重写WebClient来达到。

今天碰巧在写Python代码,就想利用Python看看怎么来做这样带保护的模拟登陆,简单说来,代码如下:

 from urllib.parse import urlencode
url = 'somurl'
r,c = h.request(url,'GET')
sc = c.decode('utf-8')
import re
regx = r'<input type="hidden" id="lt" name="lt" value="(\S+?)" />';
pm = re.search(regx,sc)
csrf = pm.group(1)
body = {'username':'user','password':'pass','lt':csrf,'service':'url'}
r,c = h.request(url,'POST',body=urlencode(body))
print (c.decode("UTF-8"))

感觉还是满简单的。当然我们也还是要利用cookie来达到目的,上面是主要的代码,大家可以参考下。

变量h的定义如下:

 h = httplib2.Http('.cache')

可以看到,用的是httplib2这个库。在Python中推荐用其来代替标准库的http客户端。

如何模拟登陆添加了CSRF保护的网站的更多相关文章

  1. Python实现网站模拟登陆

    一.实验简介 1.1 基本介绍 本实验中我们将通过分析登陆流程并使用 Python 实现模拟登陆到一个实验提供的网站,在实验过程中将学习并实践 Python 的网络编程,Python 实现模拟登陆的方 ...

  2. 使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)

    urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...

  3. Jsoup模拟登陆例子

    Jsoup模拟登陆小例子,不同的网站,需要不同的模拟策略,散仙在这里仅仅作为一个引导学习. package com.jsouplogin; import java.util.HashMap; impo ...

  4. Node.js:实现知乎(www.zhihu.com)模拟登陆,获取用户关注主题

    前一段时间,在瞎看看 Node.js,便研究通过 Node.js 实现知乎模拟登陆.相信,有很多网站有登陆权限设置,如若用户未登陆,将会跳转至首页提醒用户登陆,无法浏览部分页面. 如若是 b/s 架构 ...

  5. selenium3.7+ python3 添加cookie模拟登陆

    一.背景介绍 最近做一个爬虫项目,用selenium调用浏览器去获取渲染后的源码,但是每次登陆都需要手机验证,这真的是头痛啊,这种验证方式不要想着去破解,还是老老实实用手机收验证码去吧!反正我是不知道 ...

  6. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  7. Python模拟登陆新浪微博

    上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...

  8. python模拟登陆知乎并爬取数据

    一些废话 看了一眼上一篇日志的时间 已然是5个月前的事情了 不禁感叹光阴荏苒其实就是我懒 几周前心血来潮想到用爬虫爬些东西 于是先后先重写了以前写过的求绩点代码 爬了草榴贴图,妹子图网,后来想爬婚恋网 ...

  9. 【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程

    [前提] 想要实现使用某种语言,比如Python,C#等,去实现模拟登陆网站的话,首先要做的事情就是使用某种工具,去分析本身使用浏览器去登陆网页的时候,其内部的执行过程,内部逻辑. 此登陆的逻辑过程, ...

随机推荐

  1. 宝塔面板php扩展安装

    yum install libmcrypt libmcrypt-devel mcrypt mhash wget http://pecl.php.net/get/mcrypt-1.0.1.tgz tar ...

  2. 洛谷P3203 [HNOI2010] 弹飞绵羊 [LCT]

    题目传送门 弹飞绵羊 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置, ...

  3. USACO 控制公司 Controlling Companies

    友情链接神犇520的博客 题目: 题目描述 有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分.(此处略去一句废话)据说,如果至少满足了以下三个条件之一,公司A就可以控制公司B了 ...

  4. 如果修改GeneXus Android的一些源码文件(FlexibleClient)

    在使用GeneXus开发Android应用的过程中遇到了一个问题,使用tabs控件时发现默认高度过高,和UI设计要求的高度不一致,找了很久发现没有地方设置.后来联系了GeneXus中国厂商,得到了答复 ...

  5. Calendar日期方法

    面试居然让我获取当前月份第一天跟最后一天,主要是尴尬的回答不上来. 废话不说,直接贴代码,工作应该是够用了 public class TestCalendar { // 日期也就是这了 public ...

  6. poj3259(spfa)

    自己的第一道spfa,纪念一下,顺便转载一下spfa的原理.先po代码: #include <iostream> #include <queue> using namespac ...

  7. 理解HashSet及使用

    (1) 为啥要用HahSet?    假如我们现在想要在一大堆数据中查找X数据.LinkedList的数据结构就不说了,查找效率低的可怕.ArrayList哪,如果我们不知道X的位置序号,还是一样要全 ...

  8. Debounce 和 Throttle 的原理及实现---防止频繁触发某事件

    原文:http://blog.csdn.net/redtopic/article/details/69396722 在处理诸如 resize.scroll.mousemove 和 keydown/ke ...

  9. STM32 Hardware Development

    http://www.st.com/web/en/resource/technical/document/application_note/CD00164185.pdf AN2586 http://w ...

  10. 使用Vue.js和Axios从第三方API获取数据 — SitePoint

    更多的往往不是,建立你的JavaScript应用程序时,你会想把数据从远程源或消耗一个[ API ](https:/ /恩.维基百科.org /维基/ application_programming_ ...