Python使用Socket(Https)Post登录百度的实现代码

时间:2023-09-19 21:25:34 

登录百度,首先当然是先抓百度的登录包 ,由于是网页登录,最方便的自然是httpwatch了,我使用的测试账号是itiandatest1,密码是itianda,抓包结果:


POST /?login HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: https://passport.baidu.com/?login&tpl=mn
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Alexa Toolbar; BOIE9;ZHCN)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: passport.baidu.com
Content-Length: 243
Connection: Keep-Alive
Cache-Control: no-cache


登录包抓到了,下面开始写代码:


import socket
import ssl
sock = ssl.wrap_socket(socket.socket())


ssl是专门用来处理https的模块,我们使用该模块的wrap_socket函数生成一个SSLSocket对象。

然后建立连接:


sock.connect(('passport.baidu.com', 443))


这里需要注意的是https使用443端口,不是80。

之后发送数据:


data = '''\
POST /?login HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: https://passport.baidu.com/?login&tpl=mn
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Alexa Toolbar; BOIE9;ZHCN)
Content-Type: application/x-www-form-urlencoded
Host: passport.baidu.com
Content-Length: 243
Connection: Keep-Alive
Cache-Control: no-cache
tpl_ok=&next_target=&tpl=mn&skip_ok=&aid=&need_pay=&need_coin=&pay_method=&u=http%3A%2F%2Fwww.baidu.com%2F&return_method=get&more_param=&return_type=&psp_tt=0&password=itianda&safeflg=0&isphone=tpl&username=itiandatest1&verifycode=&mem_pass=on\
'''
sock.sendall(data)


需要注意的是sendall之后不能调用shutdown方法。

其余部分就和普通的socket处理方式没什么差别了 :


recv_data = sock.recv(8192)
sock.close()
print recv_data


由于我们只需要cookie信息,所以只接收少量数据就可以了。

登录成功的标志是服务器返回含有BDUSS的set-cookie:


HTTP/1.1 200 OK
Set-Cookie: BAIDUID=DB464E1EBA6571FB82D70460D6AAB666:FG=1; max-age=946080000; expires=Wed, 11-Dec-41 17:18:17 GMT; domain=.baidu.com; path=/; version=1
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Date: Mon, 19 Dec 2011 17:18:17 GMT
Server: Apache
P3P: CP=" OTI DSP COR IVA OUR IND COM "
P3P: CP=" OTI DSP COR IVA OUR IND COM "
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Set-Cookie: BAIDUID=26FD0CB5389BF4699C447982D8080239:FG=1; expires=Wed, 11-Dec-41 17:18:17 GMT; max-age=946080000; path=/; domain=.baidu.com; version=1
Set-Cookie: BAIDUID=26FD0CB5389BF4698191E4134CACEA29:FG=1; expires=Wed, 11-Dec-41 17:18:17 GMT; max-age=946080000; path=/; domain=.baidu.com; version=1
Set-Cookie: BDUSS=dTajkzWTFWR3hXT3Jsc09LdkNsZ011YlZka340VWtqNkZzbW0tUTdOUFp-aFpQQVFBQUFBJCQAAAAAAAAAAAouTSCLkioVaXRpYW5kYXRlc3QxAAAAAAAAAAAAAAAAAAAAAAAAAADgmoV5AAAAAOCahXkAAAAAuWZCAAAAAAAxMC42NS40NNlx707Zce9OWT; expires=Tue, 01 Jan 2030 00:00:00 GMT; path=/; domain=.baidu.com
Set-Cookie: PTOKEN=16ba4a120f070f3cc759a817981c2516; expires=Tue, 01 Jan 2030 00:00:00 GMT; path=/; domain=passport.baidu.com; HttpOnly
Set-Cookie: STOKEN=fda94395cd4ae4661cefd3a4017a8454; expires=Tue, 01 Jan 2030 00:00:00 GMT; path=/; domain=passport.baidu.com
Set-Cookie: USERID=626167789a799e630e60fb27466fa80e; expires=Tue, 01 Jan 2030 00:00:00 GMT; path=/; domain=.baidu.com
Content-Type: text/html;charset=gbk
Cache-Control: no-cache
Pragma: no-cache
Content-Encoding: none
Content-Length: 850
Connection: close


OK,登陆成功。
本文来自: itianda's blog

标签:Python,Socket
0
投稿

猜你喜欢

  • 基于PHP常用文件函数和目录函数整理

    2023-06-09 22:02:34
  • JS出现404错误原理及解决方案

    2024-04-28 09:41:26
  • Python基于Hypothesis测试库生成测试数据

    2021-10-21 20:27:22
  • Django REST Framework 分页(Pagination)详解

    2022-07-25 04:21:06
  • python实现K最近邻算法

    2021-06-18 04:05:46
  • Python 调用DLL操作抄表机

    2021-10-15 08:03:39
  • Python 发送SMTP邮件的简单教程

    2021-04-27 00:26:51
  • PHP Laravel实现文件下载功能

    2023-11-18 12:20:27
  • MySQL外键约束的禁用与启用命令

    2024-01-27 00:45:04
  • IE6图片加载的一个BUG解决方法

    2023-09-16 03:20:10
  • python文件操作整理汇总

    2022-08-16 16:46:25
  • pyqt5 使用label控件实时显示时间的实例

    2021-01-29 14:54:17
  • asp如何显示最后十名来访者信息?

    2010-06-09 18:45:00
  • 如何用css制作有趣的按钮

    2008-03-17 13:54:00
  • mysql中limit查询踩坑实战记录

    2024-01-16 13:38:45
  • 使用OpenCV校准鱼眼镜头的方法

    2022-04-02 01:58:48
  • 用私有属性来拯救IE7缩放图片的失真

    2009-03-03 13:57:00
  • vue-cli-service build 环境设置方式

    2024-05-25 15:17:08
  • 详解MySQL的用户密码过期功能

    2024-01-21 01:29:40
  • Windows10系统下Mysql8.0.13忘记root密码的操作方法

    2024-01-17 00:22:20
  • asp之家 网络编程 m.aspxhome.com