python模拟get/post请求登录

发布时间:2019-09-18 07:25:26编辑:auto阅读(1900)

    今天学习了python模拟登陆,然后自己进行一下总结,以csdn登录为例子,浏览器为Chrome

    1:直接携带cookie请求url地址

    • 1.1cookie放在headers中
    import requests
    #1.直接携带cookie请求URL地址
    url="https://www.csdn.net/"
    #cookie放在headers中
    headers={"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Mobile Safari/537.36",
             "Cookie": " cookies值"  }
    response=requests.get(url,headers=headers)
    with open('csdn1.html','w',encoding='utf-8') as f:
        f.write(response.content.decode())

     这样生成的csdn1.html文件打开就是你的csdn主页。

    这里又有一个新的问题,就是我的cookie值在哪里找?

    右键点击登录进去之后的页面,会出现以下形式,然后就可以找到cookie值。

    • 1.2cookie字典传给cookies参数
    import requests
    headers={"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Mobile Safari/537.36"}
    cookie= "cookie值"
    #将cookie字符串形式转换为字典形式
    cookie_dict = {i.split("=")[0]:i.split("=")[-1] for i in cookie.split(";")}
    print(cookie_dict)
    response=requests.get(url,headers=headers,cookies=cookie_dict)
    with open('csdn2.html','w',encoding='utf-8') as f:
        f.write(response.content.decode())

    2:先发送post请求,获取cookie,带上cookie请求登录后的页面

    #步骤:
        #1):session=requests.session() session具有的方法和requests方法一样
        #2):session.post(url,data,headers)  服务器设置在本地的cookie会保存在session中
        #3):session.get(url) 会带上之前保存在session中的cookie
    
    #携带cookie的请求地址
    url="https://www.csdn.net/"
    #post请求的地址
    post_url = "https://passport.csdn.net/account/verify"
    #post时需要提交的数据
    post_data = {"username":"18328068525","password":"CamYes123!"}
    #实例化session
    session = requests.session()
    #使用session获取本地的cookie
    session.post(post_url,data=post_data,headers=headers)
    #再使用session请求登录后的页面
    response=session.get(url,headers=headers)
    
    with open('csdn3.html','w',encoding='utf-8') as f:
        f.write(response.content.decode())

    在这里我们需要去寻找post_url。在登录界面中点击鼠标右键,得到以下界面,找到提交用户名和密码的form表单,其中的action值即为post_url

     

     这里又出现了一个问题。有些页面的form表单中并没有action这个属性,那么我们怎么找post_url?

    我们需要进行抓包,找到Request Method为post的网址,分析一下是否为提交的网站。

     上面的csdn例子是跟着教程来学习的,学习之后自己找了一个网址来练手,我找的是qq邮箱,发现qq邮箱中的form表单提交方式为get,不是post。然后用第一种方式来解决的。第二种方式针对form表单提交方式为post的网址。

     

关键字