python表单穿越

系统 1935 0

获取登录窗口背后的信息

大多数网站的服务器进行数据交互时都是用HTTP 协议的 GET 方法去请求信息,而页面表单基本上可以看成是一种用户提交 POST 请求的方式。就像网站的 URL 链接可以帮助用户发送 GET 请求一样,HTML 表单可以帮助用户发出 POST 请求。

Requests 库是一个擅长处理那些复杂的 HTTP 请求、cookie、header(响应头和请求头)等内容的 Python 第三方库。

1 表单提交只需要关注两件事
• 你想提交数据的字段名称(本案例是firstname,lastname)
• 表单的 action 属性,也就是表单提交后网站会跳转到的页面(本案例是http://url1)

  • 常见的表单如下:
            
              
First name:
Last name:
            
              import requests
params = {'firstname': 'Ryan', 'lastname': 'Mitchell'}
r = requests.post("url1", data=params)
print(r.text)

            
          
  • 如果遇到上传图片文件,如下:
            
              
Submit a jpg, png, or gif:

则构造请求如下:

            
              提交文件的方式如下:
files = {'uploadFile': open('../files/Python-logo.png', 'rb')}
r = requests.post("url2",files=files)
            
          
  • 碰到的是传递参数的GET请求,我们只需要观察URL形式就可以确认相应的表单:

http://domainname.com?thing1=foo&thing2=bar

这个请求就是下面这种表单:

            
              


对应的 Python 参数就是:
{'thing1':'foo', 'thing2':'bar'}

2 处理登录和cookie

大多数新式的网站都用 cookie 跟踪用户是否已登录的状态信息。有的网站经常暗自调整cookie,或者如果你从一开始就完全不想要用 cookie,那么 Requests 库的session函数可以完美地解决这些问题。

            
              import requests

session = requests.Session()
params = {'username': 'username', 'password': 'password'}
s = session.post("http://pythonscraping.com/pages/cookies/welcome.php", params)
print("Cookie is set to:")
print(s.cookies.get_dict())
print("-----------")
print("Going to profile page...")
s = session.get("http://pythonscraping.com/pages/cookies/profile.php")
print(s.text)
            
          

会话(session)对象(调用 requests.Session() 获取)会持续跟踪会话信息,像 cookie、header,甚至包括运行 HTTP 协议的信息。

3 HTTP基本接入认证

在发明 cookie 之前,处理网站登录最常用的方法就是用 HTTP 基本接入认证(HTTP basicaccess authentication)。有时还能见到它们,尤其是在一些安全性较高的网站或公司网站。Requests 库有一个 auth 模块专门用来处理 HTTP 认证:

python表单穿越_第1张图片

            
              import requests
from requests.auth import AuthBase
from requests.auth import HTTPBasicAuth

auth = HTTPBasicAuth('ryan', 'password')
r = requests.post(url="http://pythonscraping.com/pages/auth/login.php", auth=auth)
print(r.text)
            
          

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论