zoukankan      html  css  js  c++  java
  • 【7】Python网络请求:requests模块


    上面讲过的urllib模块太麻烦了,还有一个比较方便的模块,就是requests模块,好用到你怀疑人生·^_^,一定要会哦

    使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3)

    需要安装,pip install requests即可,下面是requests模块的实例。

    import requests
    
    response = requests.get('http://www.baidu.com')
    print(response.status_code)  # 打印状态码
    print(response.url)          # 打印请求url
    print(response.headers)      # 打印头信息
    print(response.cookies)      # 打印cookie信息
    print(response.text)  #以文本形式打印网页源码
    print(response.content) #以字节流形式打印
    import requests
    
    
    # -----------------发送get请求:获取学生信息接口----------------
    # 编写url和参数
    url='http://api.nnzhp.cn/api/user/stu_info'
    data = {"stu_name":"xiaohei"}# 参数
    
    # res = requests.get(url,data).text #text方法返回的是字符串格式的返回值
    res = requests.get(url,data).json() #json方法返回的是字典格式的返回值
    print(res)
    print(type(res))
    
    # -----------------发送post请求:登录接口----------------
    url = 'http://api.nnzhp.cn/api/user/login'
    data = {"username":"niuhanyang","passwd":"aA123456"}# 参数
    res = requests.post(url,data).text
    # res = requests.post(url,data).json()
    print(res)
    print(type(res))
    
    # -----------------发送post请求:添加学生信息(入参是josn)----------------
    url = 'http://api.nnzhp.cn/api/user/add_stu'
    data = {"name":"xiaoyang","grade":"一班","phone":"15022221111"}# 参数
    res = requests.post(url,json=data).json()
    print(res)
    
    
    # -----------------发送post请求:学生金币充值(有cookie和身份验证)----------------
    # 需要先调用登录接口,拿到cookie
    # {
    #         "error_code": 0,
    #         "login_info": {
    #                 "login_time": "20200511204314",
    #                 "sign": "107f0790d967706f3b29646ae7cfb3cf",
    #                 "userId": 47749
    #         }
    # }
    
    # cookie中key为登录的用户名,value从登录接口中获取,登陆成功之后会返回sign
    cookie = {"niuhanyang":"107f0790d967706f3b29646ae7cfb3cf"}
    url = 'http://api.nnzhp.cn/api/user/gold_add'
    data = {"stu_id    ":"1","gold":"10000"}# 参数
    res = requests.post(url,data,cookies=cookie).text
    print(res)
    
    # -----------------发送post请求:获取所有学生信息(有header)----------------
    url = 'http://api.nnzhp.cn/api/user/all_stu'
    header = {"Referer":"http://api.nnzhp.cn/"}
    res = requests.get(url,headers=header).text
    print(res)
    # -----------------发送post请求:上传文件----------------
    url = 'http://api.nnzhp.cn/api/file/file_upload'
    res = requests.post(url,files={"file":open('user.xlsx','rb')}).json() #我的参数名是file,open的是要上传的路径
    print(res)

    小练习

    import requests
    import jsonpath
    
    # 写一个方法并调用方法,请求接口,获取返回值,解析取sign
    
    def getSign():
        url = 'http://api.nnzhp.cn/api/user/login'
        data = {"username":"niuhanyang","passwd":"aA123456"}
        res = requests.post(url,data).json()
        # print(res)
        # {'error_code': 0,
         # 'login_info': {'login_time': '20200512153621', 'sign': '15aa5e3feb36248ff25e9e85abc1a024', 'userId': 47749}}
    
    #三种获取方式
        # sign = res.get("login_info").get("sign")#获取不到返回null
        # sign = res["login_info"]["sign"]# 获取不到报错
        sign = jsonpath.jsonpath(res,'$..sign')# 适合复杂的接口,返回结果是列表,获取不到返回false
        print(sign)
    
    #调试,表示是当前文件运行
    if __name__ == '__main__':
        getSign()
  • 相关阅读:
    elementUI使用el-tabs时有个坑
    滚动条滚动到指定位置(锚点)的不同实现方式
    elementUI组件 el-checkbox 的值格式问题
    前端常见面试题(七)ajax
    this指向 以及 call、apply、bind的使用和区别
    vue 项目目录解释
    vue-lic
    vue 网络请求 axios
    vue 状态管理 vuex
    keep-alive+vue 路由 (vue-router)
  • 原文地址:https://www.cnblogs.com/haifeima/p/9928365.html
Copyright © 2011-2022 走看看