zoukankan      html  css  js  c++  java
  • python学习笔记(十一):网络编程

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

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

            import json
            from urllib import request
            from urllib import parse
            pay_url = 'http://szz.nnzhp.cn/pay'
            balance_url = 'http://szz.nnzhp.cn/get_balance'
            balance_data = {'user_id':1}
            new_balance_data = parse.urlencode(balance_data)#把请求参数变成xx=11这样的
            balance_req = request.urlopen(balance_url+'?'+new_balance_data)#发送get请求
            print(balance_req.read().decode())
            #获取接口返回的结果,返回的结果是bytes类型的,需要使用decode方法解码,变成一个字符串
            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)

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

            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"}
            balance_res = requests.get(balance_url,balance_data).text
            #发送get请求,并获取返回结果,text获取的结果是一个字符串
            print(balance_res)
            balance_res = requests.get(balance_url,balance_data).json()
            #发送get请求,并获取返回结果,json()方法获取的结果直接是一个字典
            print(balance_res)
            pay_res = requests.post(pay_url,pay_data).json()#调用post方法
            print(pay_res)
            #====入参是json串的====
            url = 'http://api.nnzhp.cn/getmoney'
            data = {"userid":1}
            res = requests.post(url,json=data).json()#指定入参json
            print(res)
            #======添加cookie=====
            url = 'http://api.nnzhp.cn/setmoney2'
            data = {'userid':1,"money":9999}
            cookie = {'token':"token12345"}
            res = requests.post(url,data,cookies=cookie).json()#使用cookies参数指定cookie
            print(res)
            #=====添加权限验证=====
            url = 'http://api.nnzhp.cn/setmoney'
            data = {'userid':1,"money":91999}
            res = requests.post(url,data,auth=('admin','123456')).json()
            #使用auth参数指定权限验证的账号密码,auth传的是一个元组
            print(res)
            #======发送文件=====
            url = 'http://api.nnzhp.cn/uploadfile'
            res = requests.post(url,files={'file':open('api11.py')}).json()
            #指定files参数,传文件,是一个文件对象
            print(res)
            #=====发送header======
            url = 'http://api.nnzhp.cn/getuser2'
            data = {'userid':1}
            header = {'Content-Type':"application/json"}
            res = requests.post(url,headers=header).json()
            #指定headers参数,添加headers
            print(res)
  • 相关阅读:
    泛型技巧系列:如何提供类型参数之间的转换
    一些支离破碎的泛型反射技巧
    泛型技巧系列:类型字典和Type Traits
    Excel开发:简化工作表中选定区域的操作。
    趣味程序:打印自己代码的程序
    VBF BETA 1.5 发布了
    .NET 2.0 CER学习笔记
    随笔乱入,开心就好
    Cocos2dx for WindowsPhone:开发一个打地鼠游戏(下)
    跨平台网络游戏趋势和优势
  • 原文地址:https://www.cnblogs.com/hanzhao1987/p/8215627.html
Copyright © 2011-2022 走看看