• Python学习网络编程


    一、urllib模块

    python操作网络,也就是打开一个网站,或者请求一个http接口,使用urllib模块。

    urllib模块是一个标准模块,直接import urllib即可。在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块

    import json
    from urllib import request
    from urllib import parse
    # from urllib.request import urlopen
    # from urllib.parse import urlencode
    # urlencode 可以转化key-value键值对为xx=11这样的格式
    
    pay_url = 'http://szz.nnzhp.cn/pay'
    balance_url = 'http://szz.nnzhp.cn/get_balance'
    balance_data = {'user_id': 1}
    # 发送get请求
    new_balance_data = parse.urlencode(balance_data)  # 把请求参数变成xx=11这样的  user_id = 1
    balance_req = request.urlopen(balance_url + '?' + new_balance_data)  # 发送get请求
    print(balance_req.read().decode())# 获取接口返回的结果,返回的结果是bytes类型的,需要使用decode方法解码,变成一个字符串
    
    # 发送post请求
    pay_data = {"user_id": 1, "price": "999"}
    new_pay_data = parse.urlencode(pay_data)  # 把请求参数变成xx=11这样的
    pay_req = request.urlopen(pay_url, new_pay_data.encode())  # 发送post请求,传入参数的话
    # 参数必须是bytes类型,所以需要先encode一下,变成bytes类型
    print(pay_req.read().decode())  # 获取接口返回的结果,返回的结果是bytes类型的
    # 需要使用decode方法解码,变成一个字符串
    res = json.loads(pay_req.read().decode()) # 因为返回的是一个json串,想把json串转成字典的话,使用json模块转成一个字典
    print(res)

    二、requests模块

    上面是使用python自带的urllib模块去请求一个网站,或者接口。但是urllib模块太麻烦了:

    1)传参数都得是bytes类型;

    2)返回数据也是bytes类型还要解码;

    3)想直接把返回结果拿出来使用的话,还得用json;

    4)发get请求和post请求也不同,使用比较麻烦。

    还有一个比较方便的模块比urllib模块方便很多就是requests模块,使用pip install requests安装即可,下面是requests模块的实例

    1、发送get、post请求

    import requests
    pay_url = 'http://szz.nnzhp.cn/pay'
    balance_url = 'http://szz.nnzhp.cn/get_balance'
    balance_data = {'user_id': 1}
    pay_data = {"user_id": 1, "price": "999"}
    
    # 发送get请求,并获取返回结果,text获取的结果是一个字符串
    balance_res = requests.get(balance_url, balance_data).text
    print(balance_res)
    
    # 发送get请求,并获取返回结果,json()方法获取的结果直接是一个字典
    balance_res = requests.get(balance_url, balance_data).json()
    print(balance_res)
    
    # 调用post方法
    pay_res = requests.post(pay_url, pay_data).json()
    print(pay_res)

    注:http传的时候是urlencode编码,requests会将中文参数转urlencode编码

    2、post请求:入参类型为json串,使用json参数指定

    # ====入参是json串的====
    url='http://szz.nnzhp.cn/api/user/add_stu'
    data =  {
        "name":"requests_name",
        "grade":"天蝎座",
        "phone":17712532946,
        "sex":"",
        "age":28,
        "addr":"河南省济源市北海大道32号"
      }
    res = requests.post(url,json=data) #入参是json类型的
    print(res.json())

    3、post请求:添加cookie,使用cookies参数指定

    # ======添加cookie=====
    url = 'http://api.nnzhp.cn/setmoney2'
    data = {'userid': 1, "money": 9999}
    cookie = {'token': "token12345"}
    res = requests.post(url, data, cookies=cookie)  # 使用cookies参数指定cookie
    print(res.json())

    4、post请求:添加权限验证,auth参数

    # =====添加权限验证=====
    url = 'http://api.nnzhp.cn/setmoney'
    data = {'userid': 1, "money": 91999}
    res = requests.post(url, data, auth=('admin', '123456')).json()
    # 使用auth参数指定权限验证的账号密码,auth传的是一个元组
    print(res)

    5、post请求:发送header

    # =====发送header======
    url = 'http://api.nnzhp.cn/getuser2'
    data = {'userid': 1}
    header = {'Content-Type': "application/json"}
    res = requests.post(url, headers=header).json()
    # 指定headers参数,添加headers

    6、post请求:下载文件

    # ======下载文件=====
    url6='https://aliimg.changba.com/cache/photo/855e5493-f018-44db-8892-c8660649327b_640_640.jpg'
    res = requests.get(url6,verify=False) #verify=False如果是https的话加上这个
    
    with open('tu.jpg','wb') as fw:  #二进制文件需要用wb
        fw.write(res.content) #下载文件

    7、post请求:上传文件

    # ======上传文件=====
    url = 'http://api.nnzhp.cn/uploadfile'
    data = {'file':open('魔鬼中的天使.mp3','rb')} #二进制文件需要用rb
    res = requests.post(url, files=data)
    # 指定files参数,传文件,是一个文件对象
    print(res.json())
    print(res.status_code) #获取它的状态码 

    8.response 返回内容

    print(res.json())     #必须返回的是json才可以用
    print(res.text)       #返回文本信息字符串方式的响应体,会自动根据响应头部的字符编码进行解码,下载文件的话text就不行了
    print(res.content)    #用来下载文件文件用的,返回的是二进制会自动为你解码 gzip 和 deflate 压缩
    print(res.headers)    #获取到返回的所有header,以字典对象存储服务器响应头
    print(res.cookies)    #获取到返回的所有cookie
    print(res.status_code)  #获取到响应状态码
    print(res.url)          #获取url
    print(res.encoding)     #编码格式
    print(res.raw)          #返回原始响应体        
  • 相关阅读:
    配置ssl(阿里云+腾讯云)
    使用Nativefier将web页面打包为桌面应用
    临时切换淘宝源下载包
    ajax实现异步上传多图并且预览
    通过phpexcel插件导出报表功能实现
    ThinkPHP5.0自定义命令行的使用
    Longest Substring Without Repeating Characters
    计算机操作系统巡回置换算法
    HDU 2041 DP
    HDU 2044 DP (fibonacci)
  • 原文地址:https://www.cnblogs.com/ddxxn/p/9714069.html
Copyright © 2020-2023  润新知