zoukankan      html  css  js  c++  java
  • Python Requests学习笔记

    Question1: 

    1. 为什么requests中需要添加headers?

    “在爬虫的时候,如果不添加请求头,可能网站会阻止一个用户的登陆,此时我们就需要添加请求头来进行模拟伪装”

    2. requests库如何保持会话?

    如果要跳过验证码登录并保持登录状态(即保持一个会话),只需要提取登录后的cookie,并把它添加到一个requests库的Session对象即可

    注: requests只能保持 cookiejar 类型的cookie,而我们手动构建的cookie是dict类型的。所以要把dict转为 cookiejar类型

    3. 向session对象中添加cookie方式:

    ref: https://blog.csdn.net/yong1xin/article/details/88542045

    Demo:

    import requests
    from requests.cookies import RequestsCookieJar
    import urllib3
    import json
    urllib3.disable_warnings()
    url=u'https://vmaosupdb2.gencos.com/APXLogin/api/authenticate'
    
    getPayload={'loginname':'admin', 'password':'advs'}
    r=requests.get(url, getPayload, verify=False)
    print("url is", r.url)
    print("json is: ", r.json)
    print(r.status_code)print("Cookie is: ", r.cookies)
    print("headers is: ", r.headers)
    r.encoding='unicode'
    
    headers={'Accept': 'application/json, text/plain, */*',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',
    'Connection': 'keep-alive',
    'Cookie': 'AOAuth1=SessionCode=2F9C444F-5C5E-4085-A254-F7C3C6E13E47; AODBID1=DatabaseIdentifierCode=VgBNAEEATwBTAFUAUABEAEIAMgBcAFMAUQBMAF8ATABBAFQASQBOADEAXwAyADAAMQA2AC4AQQBQAFgARgBpAHIAbQAEQ',
    'Host': 'vmaosupdb2.gencos.com',
    'Referer': 'https://vmaosupdb2.gencos.com/APXUILogin/',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site':'same-origin' ,
    'SessionCode': '2F9C444F-5C5E-4085-A254-F7C3C6E13E47',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
    }
    
    # demo:  将cookies添加到requests session对象中
    # 1. 创建cookiejar实例
    cookie_jar=RequestsCookieJar()
    
    #2. 将获取的cookie转换为字典
    cookie_dict=requests.utils.dict_from_cookiejar(r.cookies)
    
    #3. 将字典转为CookieJar:
    cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)
    
    #4. 创建session,添加cookies
    # 往下使用requests的地方,直接使用session即可,session就会保存服务器发送过来的cookie信息
    session=requests.session()
    session.cookies=cookies
    
    url2=u'https://vmaosupdb2.gencos.com/APXLogin/api/internal/InterestedParty/search?$d=y&$m=n&$s=40&$c=-226021101' 
    
    
    payload2=json.dumps({
            "Search": {
                "Query": {
                    "Joins": [],
                    "CriteriaList": [],
                    "Entity": "InterestedParty"
                },
                "Options": {
                    "PageNumber": 0,
                    "PageSize": 50,
                    "OrderBy": [
                        "ContactName asc",
                        "ReportHeading asc"
                    ],
                    "UseDistinct": False
                }
            }
    })

    #辅助方法:调整response显示样式
    # json.dumps()用于将字典形式的数据转化为字符串,json.loads()用于将字符串形式的数据转化为字典
    def betterPrint(json_str):
    return json.dumps(json.loads(json_str), indent=4)

    r2=session.post(url=url2, headers=jsonheaders, data=payload2, verify=False)
    rr=betterPrint(r2.text)

    
    

    # 5. 将响应内容以text形式写入文件中
    with open('filename', 'w') as fd:
    fd.write(rr)

     
     
  • 相关阅读:
    Codeforces 177G2 Fibonacci Strings KMP 矩阵
    Codeforces Gym100187C Very Spacious Office 贪心 堆
    Codeforces 980F Cactus to Tree 仙人掌 Tarjan 树形dp 单调队列
    AtCoder SoundHound Inc. Programming Contest 2018 E + Graph (soundhound2018_summer_qual_e)
    BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
    NOIP2016提高组Day1T2 天天爱跑步 树链剖分 LCA 倍增 差分
    Codeforces 555C Case of Chocolate 其他
    NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
    NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
    NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
  • 原文地址:https://www.cnblogs.com/TestBetter/p/11674732.html
Copyright © 2011-2022 走看看