zoukankan      html  css  js  c++  java
  • 接口之requests

    一、请求方式:getpost、put、delete、head、options

    import requests     #http协议
    
    url='http://httpbin.org/get'
    payload={'key1':'value2','key2':'value2'}
    # get请求传参数时,使用params关键字
    # post请求传参数时,使用data关键字
    # timeout                 等待响应的时间
    # allow_redirects=True    允许重定向
    # json=body               body是json格式的
    # data=json.dumps(body)   将dict转化成json字符串
    r=requests.get(url, params=payload,timeout=5)
    print('返回响应体:', r.text)
    print('以JSON格式解析响应内容:', r.json())
    print('返回状态码:', r.status_code)
    print('打印cookies:', r.cookies)
    print('获取原来创建的Request对象:', r.request)
    print('响应头:', r.headers)
    print('请求头:', r.request.headers)
    print('响应头Connection:',r.headers.get('Connection'))
    print('响应头Content-Type:',r.headers['Content-Type'])
    
    #如果发送了一个错误请求,如404、500等,可以通过raise_for_status()来抛出异常
    print('错误码:', r.raise_for_status())
    #查看requests使用了什么编码,同时可以用r.encoding属性来改变它
    print('编码前:',r.encoding)
    r.encoding='gbk'
    print('编码后:',r.encoding)
    print('重定向历史:',r.history)
    
    print('断言:', r.status_code == requests.codes.ok)

    二、cookies

    应用:通过fiddler抓包获取登录前后cookies的差异,然后将差异set到刚登录的cookies中,再次请求就能登录了。

    import requests
    
    url='http://httpbin.org/cookies'
    cookies=dict(cookies_are='working')
    r=requests.get(url, cookies=cookies)
    
    jar=requests.cookies.RequestsCookieJar()
    print('----响应结果---',r.text)
    print('----设置前---',jar)
    
    jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
    jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/cookies')
    #设置cookies并请求
    r = requests.get(url, cookies=jar)
    print('----设置后---',jar)
    print('----响应结果---',r.text)

    三、上传文件

    import requests
    
    url = 'http://httpbin.org/post'
    dir=r'C:Users123Desktop	est.txt'
    #上传多部分编码文件
    files1 = {'file': open(dir, 'rb')}
    r = requests.post(url, files=files1)
    print('---1---',r.text)
    
    #显式地设置文件名,文件类型和请求头
    files2 = {'file': ('test.txt', open(dir, 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
    r = requests.post(url, files=files2)
    print('---2---',r.text)
    
    #发送作为文件来接收的字符串
    files3 = {'file': (dir, 'some,data,to,send
    another,row,to,send
    ')}
    r = requests.post(url, files=files3)
    print('---3---',r.text)

    四、xml转json

    from xml.parsers.expat import ParserCreate
    
    class Xml2Json:
        LIST_TAGS = ['COMMANDS']
    
        def __init__(self, data=None):
            self._parser = ParserCreate()
            self._parser.StartElementHandler = self.start
            self._parser.EndElementHandler = self.end
            self._parser.CharacterDataHandler = self.data
            self.result = None
            if data:
                self.feed(data)
                self.close()
    
        def feed(self, data):
            self._stack = []
            self._data = ''
            self._parser.Parse(data, 0)
    
        def close(self):
            self._parser.Parse("", 1)
            del self._parser
    
        def start(self, tag, attrs):
            assert attrs == {}
            assert self._data.strip() == ''
            self._stack.append([tag])
            self._data = ''
    
        def end(self, tag):
            last_tag = self._stack.pop()
            assert last_tag[0] == tag
            if len(last_tag) == 1:  # leaf
                data = self._data
            else:
                if tag not in Xml2Json.LIST_TAGS:
                    # build a dict, repeating pairs get pushed into lists
                    data = {}
                    for k, v in last_tag[1:]:
                        if k not in data:
                            data[k] = v
                        else:
                            el = data[k]
                            if type(el) is not list:
                                data[k] = [el, v]
                            else:
                                el.append(v)
                else:  # force into a list
                    data = [{k: v} for k, v in last_tag[1:]]
            if self._stack:
                self._stack[-1].append((tag, data))
            else:
                self.result = {tag: data}
            self._data = ''
    
        def data(self, data):
            self._data = data

    例子:

    url = 'http://api.map.baidu.com/telematics/v3/weather?location=武汉&ak=8IoIaU655sQrs95uMWRWPDIa'
    r = requests.post(url)
    # 获取返回结果
    m = r.text
    print('获取返回结果:',m)
    result=Xml2Json(m).result
    print('将返回结果转换json:',result)
    print('断言:',result['CityWeatherResponse']['error'] == '0')
  • 相关阅读:
    sql注入式攻击的原理及实例分析 (转载)
    java中静态初始化块、初始化块和构造方法的理解 (转载)
    Java Web应用开发中的一些概念(转载)
    Map.Entry的使用(转载)
    java对象的存储位置(转载)-- 结合上一篇一起学习
    深入Java对象及元素的存储区域(转载)
    Java 面试题问与答:编译时与运行时(转载)看了一遍还不是很懂 先收着
    Liferay应用程序模板如何获取自定义结构的字段值
    FreeMarker 快速入门
    Tomcat9.x配置规范
  • 原文地址:https://www.cnblogs.com/yinwenbin/p/10560836.html
Copyright © 2011-2022 走看看