• Python-网络编程


    一、使用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类型

    三个函数的用法:

    # from urllib import parse
    # host='http://api.nnzhp.cn/'
    # login_url='/api/login'
    # new_url = parse.urljoin(host,login_url) #拼url
    # result = parse.unquote_plus('https://www.baidu.com/s?wd=%E7%99%BE%E6%B5%8B')#url解码
    # s = parse.quote_plus("https://www.baidu.com/s?wd=今天中午吃什么")#url编码
    # print(s)

    二、第三方模块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()方法返回的是字典格式的返回值
    # res=requests.get(url,data).content() #content()方法返回的是下载文件和图片它们本来就是二进制的,所以用这个下载
    
    # 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)

    #post请求 ---------url是https的,传递的参数中带的cookie特别多# ------------
    #请求的url是hettps的,则返回的方法里加一个verify=False即可
    #例如:cookie: pgv_pvid=1289351355; ts_uid=2874476535; pgv_pvi=716839936; RK=1c6JCd79Su; ptcz=8d9ae782c5273e7ad41b33c7d1419ac973a803946aaabf550384fdde8dabcf0f; ts_refer=xui.ptlogin2.qq.com/cgi-bin/xlogin; pgv_info=ssid=s7147930857; ts_last=qun.qq.com/member.html; pgv_si=s2593092608; uin=o0382706058; skey=@opagi51Cw; p_uin=o0382706058; pt4_token=Q9TmBK2ayCbXX0pYki9NyXIpr2cAsd-phFXaKmMTIhI_; p_skey=8SAKE67OSSDTsLSKyTC17ae*EyANlGIAH5JiOP70MYo_; traceid=93b6d19534

    # url='https://qun.qq.com/cgi-bin/qun_mgr/search_group_members'
    # data = {'gc':6135368,'bkn':240397961,'st':0,'end':20}
    # headers = {'cookie':'pgv_pvi=6636933120; RK=gRZhhBpNbS; ptcz=14bab564718e3e1048a09cc0e18a23f7c51f20d5b93da610cc1427f51f63a2f8; pgv_pvid=4990195883; ts_uid=5190463916; ts_refer=xui.ptlogin2.qq.com/cgi-bin/xlogin; uin=o0511402865; skey=@LUFPqSBxO; ptisp=cnc; pgv_info=ssid=s5139002932; ts_last=qun.qq.com/member.html; pgv_si=s4695831552; p_uin=o0511402865; pt4_token=m-08apoc2xJxW51Ahx*LKfuD4UyR2WEUd6PWyQ1PB8s_; p_skey=1whnzxqbI2kEJ7IEYgnr6wzrBRo8BY6dhPg57tD7ZBs_;'}
    # r = requests.post(url,data=data,verify=False,headers=headers )
    # print(r.json())
    #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是接口文档里传递的参数名
    
    
  • 相关阅读:
    Unity---简单的性能优化理论
    第一次参加Game Jam
    Unity---自制游戏中控制角色的移动摇杆
    不使用插件 修改Unity和C#创建时的默认模板
    Leetcode---剑指Offer题10---斐波那契数列
    Leetcode---剑指Offer题9---用两个栈实现队列
    MySQL百万级数据量分页查询方法及其优化
    Nginx日志切割
    Nginx服务优化及优化深入(配置网页缓存时间、日志切割、防盗链等等)
    MySQL主从复制+读写分离原理及配置实例
  • 原文地址:https://www.cnblogs.com/tata-learning/p/11809025.html
Copyright © 2020-2023  润新知