• 11 python学习笔记-网络编程(使用urlib或request模块请求接口)


      python操作网络,即打开一个网站,或者请求一个http接口,可以通过使用python自带的标准模块urllib或第三方库requests实现

    一、使用urllib模块操作网络

      urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块。使用urlib模块发送请求实例如下:

     1 from urllib import request
     2 from urllib import parse
     3 import json
     4 
     5 #1、发送get请求
     6 url = 'http://api.xxxx.cn/api/user/stu_info'
     7 data = {'stu_name':'xiaohei'}
     8 tmpData = parse.urlencode(data) #将数据格式变成Kv k=v
     9 tmpUrl=url +'?'+tmpData  #将接口url和参数拼接
    10 res = request.urlopen(tmpUrl) #请求接口
    11 resForRead=res.read() #通过read方法获取返回值结果,返回值结果是bytes
    12 print(type(resForRead))
    13 resForString= resForRead.decode() #通过decode方法将bytes转成string
    14 print(type(resForString))
    15 resForDict = json.loads(resForString) #通过json 将字符串转换为字典
    16 print(resForDict)
    17 
    18 #2、发送post请求
    19 url='http://api.xxx.cn/api/user/login'
    20 data={"username":"nhy","passwd":"123456"}
    21 tempData= parse.urlencode(data) #k=v
    22 #post 和 get的区别 在于urlopen时,get发的是接口和参数的拼接字符
    23 res=request.urlopen(url,tempData.encode())#post 请求 参数1 为接口地址,参2 为请求参数,参数要求bytes类型
    24 print(res.read().decode())

    二、使用requests库操作网络

      上面是使用python自带的urllib模块去请求一个网站,或者接口,但是urllib模块太麻烦了,传参数的话,都得是bytes类型,返回数据也是bytes类型,还得解码,想直接把返回结果拿出来使用的话,还得用json,发get请求和post请求,也不通,使用比较麻烦,还有一个比较方便的模块:requests模块,它使用比较方便,需要安装,pip install requests即可。

    发送一个请求,分为以下三步

    • 1.1 组装请求: 请求可能包含url,params(url参数),data(请求数据),headers(请求头),cookies等,最少必须有url
    • 1.2发送请求,获取响应:支持get,post等各种方法发送,返回的是一个响应对象
    • 1.3. 解析响应: 输出响应文本

    具体实例如下:

     1 import requests
     2 
     3 
     4 #1、发送get请求 组装参数 
     5 url = 'http://api.xxxx.cn/api/user/stu_info'
     6 data = {'stu_name':'xiaohei'}
     7 # res =requests.get(url,data).text #发送get请求,并获取响应结果,text解析响应返回结果是一个字符串
     8 res =requests.get(url,data).json() #发送get请求,并获取响应结果,json解析响应返回结果是一个字典
     9 print(res) #输出响应的文本
    10 
    11 #2、传统表单类post请求(x-www-form-urlencoded)
    12 url='http://api.xxx.cn/api/user/login'
    13 data={"username":"niuhany","passwd":"aA123456"} #post请求发送的数据,字典格式
    14 res=requests.post(url,data).json() #通过post方法传递
    15 print(res)
    16 print(type(res))
    17 
    18 #json类的post请求(application/json)
    19 url ='http://api.xxxx.cn/api/user/add_stu'
    20 data={"name":"dsxl123","grade":"一班","phone":18388888888} #data类型支持字典和字符串
    21 res = requests.post(url,json=data).json()#接口入参要求是json格式,可以通过在post请求中指定json
    22 print(res)
    23 
    24 #添加cookie的post请求
    25 cookie={"nhyang":"160eb8812a08731ca9ce9c1ab6c6bc0f"}
    26 url="http://api.xxx.cn/api/user/gold_add"
    27 data={"stu_id":1,"gold":10000}
    28 res=requests.post(url,data,cookies=cookie).text#通过cookies进行cookie的传递
    29 print(res)
    30 
    31 #添加header的get请求
    32 url="http://api.xxx.cn/api/user/all_stu"
    33 header={"Referer":"http://api.nnzhp.cn/"}
    34 res =requests.get(url,headers=header).text
    35 print(res)
    36 
    37 #传文件到服务器
    38 url='http://api.xxx.cn/api/file/file_upload'
    39 #通过files参数将文件传递到服务器
    40 res=requests.post(url,files={"file":open('tools.py')})
    41 print(res)
    
  • 相关阅读:
    解决Laravel 开启HTTPS反向代理时Url一直是Http问题
    Laravel Passport 401 Unauthenticated.
    Windows 10 1909 (2020年1月) DVD (Chinese-Simplified)
    Office Professional Plus 2019 下载安装激活
    电脑设置U盘启动快捷键
    适用于 Laravel 的阿里云MNS队列驱动
    idea 2021版下创建springMvc项目过程
    UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
    Mac 下打包python 程序
    Tomcat 对 servlet 的支持表
  • 原文地址:https://www.cnblogs.com/cocomoly/p/11827025.html
Copyright © 2020-2023  润新知