登录百度,首先当然是先抓百度的登录包 ,由于是网页登录,最方便的自然是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 ssl socket_Python使用Socket(Https)Post登录百度的实现代码相关推荐

  1. 在HTTPS网站安装百度分享按钮代码及其SEO外链作用

    百度分享按钮,可以帮用户实现一键将网站内容分享到第三方网站,但它的功能与作用远远不止便于分享. 今天,小小课堂网为大家带来的是百度分享按钮代码安装及对网站SEO优化外链的效果.希望对大家有所帮助. 一 ...

  2. python 简单socket_Python 简单socket

    OSI七层模型(Open System Interconnection,开放式系统互联) 应用层 表示层 回话层 传输层 tcp,udp 网络层 ip,icmp 数据链路层 mac地址 物理层 物理网 ...

  3. python自动登录百度_python实现自动登录百度账号功能代码

    from selenium import webdriver import time driver = webdriver.Chrome() driver.implicitly_wait(10) dr ...

  4. 从入门到入土:Python爬虫学习|实例练手|爬取百度产品列表|Xpath定位标签爬取|代码注释详解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  5. VII Python(9)socket编程

    VII Python(9)socket编程 socket编程: 网络基础: TCP/IP: socket模型: python socket C/S开发: 非阻塞(select.poll.epoll) ...

  6. Python SSL操作手册

    ssl -套接字对象的 TLS/SSL 包装器 此模块提供对 Client 端和服务器端网络套接字的传输层安全性(通常称为"安全套接字层")加密和对等身份验证Function的访问 ...

  7. Python零基础速成班-第12讲-Python获取网络数据Socket,API接口,网络爬虫Crawler(制作弹幕词云)

    Python零基础速成班-第12讲-Python获取网络数据Socket,API接口,网络爬虫Crawler(制作弹幕词云) 学习目标 获取网络数据Socket API接口 网络爬虫Crawler(制 ...

  8. nginx使用ssl模块配置支持HTTPS访问

    背景: 项目开发中用到了微信小程序,但是服务器配置URL必须是HTTPS,所以需要通过配置nginx的SSL模块来支持HTTPS访问,也就是说,要做一个网站域名为 XXX.com 要求通过HTTPS: ...

  9. Ubuntu20.04实现Python基于Selenium实现上海大学校园网自动登录

    Ubuntu20.04实现Python基于Selenium实现上海大学校园网自动登录 以anaconda环境为例,创建一个Selenium的虚拟环境: 一.安装selenium 1. conda cr ...

最新文章

  1. Ellipse(椭圆)
  2. Python自动化测试(1)-自动化测试及基本技术手段概述
  3. 在redhat9中交叉编译nano-X nxlib和fltk
  4. 我能成为项目经理么?
  5. HBase 2.0 之修复工具 HBCK2 运维指南
  6. 用于zsh的插件incr(目录提示和补全)
  7. 随想录(用memmove函数代替strncpy函数)
  8. linux之at,crontab
  9. 过程生产excel_通用Excel做销售订单动态展示板
  10. 华为路由器OSPF基础配置命令
  11. 在线编译器汇总|2020年最新版
  12. sort()基础知识总结+超简短的英文名排序写法
  13. zerg发出了第一个报文,纪念一下!!!
  14. serv-u 用户时间显示相差8小时_调好闹钟!4月8日凌晨,将迎来今年最大满月
  15. nwjs编写浏览器外壳
  16. cesium获取当前层级
  17. pythoninput输入数字_python如何保证输入键入数字的方法
  18. const的作用和用法
  19. Fast R-CNN 论文详读
  20. 在两个数字之间求出其间所有质数

热门文章

  1. python中if控制语句_Python 极简教程(十二)逻辑控制语句 if else
  2. GitOps—通过CI/CD自动化构建虚拟机模版
  3. zlib-1.2.11手册
  4. 用 cairo 实现跨平台图形
  5. struct seq_file
  6. Java判断字符串是否为纯数字(0-9)
  7. 生成ltx文件命令_利用二次开发工具批量生成PCDMIS程序
  8. Spring Boot细节挖掘(拦截器)
  9. js保留两位小数的函数_如何在Excel中使用ROUND系列函数
  10. Feign Hystrix微服务调用Session传播