美文网首页
python http请求与响应

python http请求与响应

作者: 张老三168 | 来源:发表于2018-04-16 17:21 被阅读0次

    python urllib包

    python内置了urllib包来处理http请求,主要是一下几个模块:

    名称 功能
    urllib.error 处理异常模块
    urllib.parse 解析url模块
    urllib.request 请求url模块
    urllib.response 响应模块
    urllib.robotparser 解析 robots.txt文件

    主要方法

    • urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
      打开url或者对象

    get请求

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    import urllib
    # import urllib2 # python3中没有 urllib2 用urllib.request替代
    
    # get请求
    resu = urllib.request.urlopen('https://hao.360.cn', data=None, timeout=10)
    data = resu.read().decode()
    
    #打开文件
    fo = open('test.txt','a+',encoding = 'utf-8') # 打开文件 这里网络数据流的编码需要和写入的文件编码一致
    fo.write(data)   # 写入文件
    fo.close()       # 关闭文件
    

    如果get的请求携带参数需要通过url方式传值

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    import urllib
    import json
    
    def getExpressInfo(num):
        """
        通过快递单号获取快递详情方法
        :param num: Numbers 快递单号
        :return: mixed      快递详细
        """
        # get请求
        url = 'http://www.kuaidi100.com/autonumber/autoComNum?text=' + num # get请求通过url传值
        basicInfo = urllib.request.urlopen(url, data=None, timeout=10) # python3应该可以通过检测data是否携带参数来判断是get请求还是post请求
        data = json.loads(basicInfo.read().decode()) #解析返回对象获取
    
        comInfo = data['auto'][0]['comCode'] # 获取快递公司信息
    
        # 通过公司名称和快递单号请求快速100的API
        url2 = 'http://api.kuaidi100.com/api?id=be2205c7c55b54eb&com=' + comInfo + '&nu=' + num
        result = urllib.request.urlopen(url2, data=None, timeout=10)
        expressInfo = result.read().decode()
    
        print(expressInfo)
        #返回快递信息
        return(expressInfo)
    
    
    num = '280688688407' # 快递单号
    
    #调用快递信息方法
    getExpressInfo(num)
    

    post请求

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    import urllib
    import json
    
    url = 'http://www.daily.com/ABC/ABC/ABC'
    values = {
                "abc":"XXXXX",
                "efg":"XXXXX"
                }
    
    headers = {'Content-Type': 'application/json'} # 设置请求头 告诉服务器请求携带的是json格式的数据
    request = urllib.request.Request(url=url, headers=headers, data=json.dumps(values).encode(encoding='UTF8')) # 需要通过encode设置编码 要不会报错
    
    response = urllib.request.urlopen(request) # 发送请求
    
    logInfo = response.read().decode() # 读取对象 将返回的二进制数据转成string类型
    print(logInfo)
    

    备注:以上的是针对python3.5版本的,python2.7所使用的模块有很大的区别
    (模块的源码没详细看,写的不对的地方,高手莫喷,多多指导!)

    相关文章

      网友评论

          本文标题:python http请求与响应

          本文链接:https://www.haomeiwen.com/subject/bifekftx.html