一加论坛登录(python 小白登天日记)
大部分网站的登录是用的post请求,返回的内容包含咱们需要的cookie里面的内容。
那什么是cookie呢?
当我开发移动端app的时候,每次像服务器请求都需要发送给服务器我的账户名和密码,而网页开发的时候,<b><a style= "color:red">服务器端如何验证你是你呢?</a></b>
这个时候就是需要cookie的时候了,当我们在浏览器上登录一个网站之后,本地并不需要保存你的账户名和密码,只需要保存这个cookie就行了,你可以把它当作一个有时间限制的门禁卡,当你访问服务器这个房子里需要用户登录的门时,只要刷一下,门就开了。
要想模拟一加论坛的登录,首先还有一个必不可少的操作,<a style = "color:red">抓包</a>
一加论坛抓包现场在Mac上我常用的抓包工具是Charles和surge,windows常用的瑞士军刀burp,当然其实chrome和Firefox也很好用,在这里就不赘述了。
简单说一下怎么抓包,打开<a href = "http://www.oneplusbbs.com/">一加登录页面</a>,打开程序点开始录制,填写一个错误的密码,抓包工具就抓到了(如上图所示)
<b>之所以填错误的密码是为了它跳到登录后的页面,获取一些无用信息。</b>
我把抓到的数据复制到了下面:
<code>
POST http://account.oneplus.cn/onepluslogin HTTP/1.1
Host: account.oneplus.cn
Proxy-Connection: keep-alive
Content-Length: 89
Accept: application/json, text/javascript, /; q=0.01
Origin: http://account.oneplus.cn
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://account.oneplus.cn/login?jump=http%3A%2F%2Fwww.oneplusbbs.com%2F&source=2
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4
Cookie: *
loginName=138%40163.com&passWord=password&source=2&remember=0&channel=2&verifyCode=
</code>
咱们需要的:
方法名:<code>POST</code>
请求地址:<code>http://account.oneplus.cn/onepluslogin</code>
参数params:<code>loginName=138%40163.com&passWord=password&source=2&remember=0&channel=2&verifyCode=</code>
可以看出来,相对于新浪微博来说,一加论坛的登录还是挺简单的,用户名和密码都没有进行加密,直接变成参数用来请求。
而且经过测试,登录时需要headers伪装成浏览器的,大可以把headers当作一个字典参数,而这个字典里面有些东西是必要的,有些不是。
咱们暂时需要的东西都找到了,现在开始写python(2.7):
<code>
import httplib
import urllib
Url = "account.oneplus.cn"#HOST地址
loginUrl = "/onepluslogin"#请求地址拼接地址
post_data = {#请求体(body),包含各种参数,也就是上面咱们抓到的
"loginName": "你的账号",
"passWord": "你的密码",
"source": 2,
"remember": 0,
"channel": 2,
"verifyCode": ""
}
headers = {#请求头,经过我测试,只需要这一个参数就行了
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
}
conn = httplib.HTTPConnection(Url)
params = urllib.urlencode(post_data)#将post_data这个字典转换成字符串
conn.request(method="POST",url=loginUrl,body=params,headers=headers);#开始登录
response = conn.getresponse()#response就是请求后返回的数据
print response.msg#打印返回的body
print response.status#打印返回的状态码
</code>
因为我是个小白,刚开始写完运行成功我也不知道,什么也打印不出来,最后打印了一下response.status发现状态码是200,然后搜索了一下,才打印出了msg,这才知道是自己太笨了。
和小伙伴的对话