Python-网络编程

时光总嘲笑我的痴心妄想 提交于 2019-12-03 21:07:25

一、使用python自带模块urllib

  • 模拟页面请求服务端,python提供了一个urllib模块,作用是通过python代码调用接口进行参数传递并获取到接口的返回值信息
  • urllib模式是一个标准模块,直接import urllib即可

1、发送get请求

from urllib import request
from urllib import parse
import json

#get请求

# url='http://www.nzhp.cn/api/user/stu_info'
#
# data={'stu_name':'xiaohei'} #传递参数
#
# tmpData=parse.urlencode(data) #将数据变成kv形式,即k=v
# #接口+参数
# tmpUrl=url+'?'+tmpData # 将接口和参数拼接
# res=request.urlopen(tmpUrl) #请求接口
# resForRead=res.read() #通过read方法获取返回值结果,返回值结果是二进制bytes的类型
# resForString=resForRead.decode() #通过decode将bytes 转换成str类型,反过来是用encode
# resForDict=json.loads(resForString) #通过json将字符串转换成字典
# print(resForString)
# print(resForDict)

2、发送post请求

#post请求

url='http://www.nzhp.cn/api/user/login'
data={'username':'nhyy','passwd':'aA123456'}
tmpData=parse.urlencode(data) #变成k=v形式
#get和post的区别在于urlopen时,get发的是接口和参数拼成的字符串,post发送的是接口和参数,参数要求是bytes类型
res=request.urlopen(url,tmpData.encode()) #post请求参数1 为接口地址,参数2 为参数要求是bytes类型,使用encode将str转换成bytes类型
print(res.read().decode())

二者区别:

get和post的区别在于urlopen时,get发的是接口和参数拼成的字符串,post发送的是接口和参数,参数要求是bytes类型

 

二、第三方模块requests模块

由于urllib模块使用起来比较麻烦,这里介绍一个使用比较方便的requests模块。

使用时需要安装:pip install requests即可

import requests

#-------get请求----------

# url='http://www.nzhp.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://www.nzhp.cn/api/user/login'
# data={'username':'niu','passwd':'aA123456'}
#
# # res=requests.post(url,data).text  text方法返回的是字符串格式的返回值
# res=requests.post(url,data).json() #json()方法返回的是字典格式的返回值
# print(res)
# print(type(res))


#post请求----------入参要求是json类型,可以通过在post中用-----------

# url='http://www.nzhp.cn/api/user/add_stu'
# data = {"name":"dsx123","grade":"一班","phone":11099999991}
#
# res=requests.post(url,json=data).json() #接口要求入参是json类型,可以通过在post请求中指定json
# print(res)


#post请求 ---------传递的参数中带cookie的------------
# cookie={'niuang':'0d11299888c03b25c9f89bb1231de23d'}
# url='http://www.nzhp.cn/api/user/gold_add'
# data={"stu_id":2,"gold":100}
# res=requests.post(url,data,cookies=cookie).text #通过cookies进行cookie的传递
# print(res)


#get请求 -------需要传递header------------

# url='http://www.nzhp.cn/api/user/all_stu'
# header={"Referer":"http://www.nzhp.cn/"}
# res=requests.get(url,headers=header).text
# print(res)


#post请求------传文件到服务器上---------

url='http://www.nzhp.cn/api/file/file_upload'
#通过files参数将文件传递到服务器上
# res=requests.post(url,files={'file':'open(urllib.test.py,rb)'}).text
res=requests.post(url,files={'file':open('urllib.test.py','rb')}).text  #file是接口文档里传递的参数名
print(res)

三、jsonpath模块

需要安装 pip install jsonpath

当遇到层级比较深的字典时,要想取值使用jsonpath取值比较方便,可以一下取到。

如果取得值不存在,则返回False,

import jsonpath

d = {
    "error_code": 0,
    "stu_info": [
        {
            "id": 314,
            "name": "矿泉水",
            "sex": "男",
            "age": 18,
            "addr": "北京市昌平区",
            "grade": "摩羯座",
            "phone": "18317155663",
            "gold": 100,
            "cars": [
                {"car1": "bmw"},
                {"car2": "ben-z"},
            ]
        }
    ]

}
car2 = jsonpath.jsonpath(d, '$..car2') #jsonpath是通过$..来定位
print(car2)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!