zoukankan      html  css  js  c++  java
  • 接口_requests_基于python

    HTTP request python官方文档:http://cn.python-requests.org/zh_CN/latest/

    1.  环境

    基于环境,需要安装requests 模块,安装方法 pip install requests
    想学习requests,就通过help吧

    import requests
    help(requests)

    返回结果如下:

    C:Python27python.exe E:/test/interface/g_3.py
    Help on package requests:
    
    NAME
        requests
    
    FILE
        c:python27libsite-packages
    equests__init__.py
    
    DESCRIPTION
        Requests HTTP Library
        ~~~~~~~~~~~~~~~~~~~~~
        
        Requests is an HTTP library, written in Python, for human beings. Basic GET
        usage:
        
           >>> import requests
           >>> r = requests.get('https://www.python.org')
           >>> r.status_code
           200
           >>> 'Python is a programming language' in r.content
           True
        
        ... or POST:
        
           >>> payload = dict(key1='value1', key2='value2')
           >>> r = requests.post('http://httpbin.org/post', data=payload)
           >>> print(r.text)
           {
             ...
             "form": {
               "key2": "value2",
               "key1": "value1"
             },
             ...
           }
        
        The other HTTP methods are supported - see `requests.api`. Full documentation
        is at <http://python-requests.org>.
        
        :copyright: (c) 2017 by Kenneth Reitz.
        :license: Apache 2.0, see LICENSE for more details.
    
    PACKAGE CONTENTS
        __version__
        _internal_utils
        adapters
        api
        auth
        certs
        compat
        cookies
        exceptions
        help
        hooks
        models
        packages
        sessions
        status_codes
        structures
        utils
    
    FUNCTIONS
        check_compatibility(urllib3_version, chardet_version)
    
    DATA
        __author__ = 'Kenneth Reitz'
        __author_email__ = 'me@kennethreitz.org'
        __build__ = 137220
        __cake__ = u'u2728 U0001f370 u2728'
        __copyright__ = 'Copyright 2017 Kenneth Reitz'
        __description__ = 'Python HTTP for Humans.'
        __license__ = 'Apache 2.0'
        __title__ = 'requests'
        __url__ = 'http://python-requests.org'
        __version__ = '2.18.4'
        codes = <lookup 'status_codes'>
    
    VERSION
        2.18.4
    
    AUTHOR
        Kenneth Reitz
    
    
    
    Process finished with exit code 0

    获取requests所有的方法和类,就使用dir吧

    import requests
    print dir(requests)

    返回如下:

    ['ConnectTimeout', 'ConnectionError', 'DependencyWarning', 'FileModeWarning', 'HTTPError', 'NullHandler', 'PreparedRequest', 'ReadTimeout', 'Request', 'RequestException', 'RequestsDependencyWarning', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__author_email__', '__build__', '__builtins__', '__cake__', '__copyright__', '__description__', '__doc__', '__file__', '__license__', '__name__', '__package__', '__path__', '__title__', '__url__', '__version__', '_internal_utils', 'adapters', 'api', 'auth', 'certs', 'chardet', 'check_compatibility', 'codes', 'compat', 'cookies', 'delete', 'exceptions', 'get', 'head', 'hooks', 'logging', 'models', 'options', 'packages', 'patch', 'post', 'put', 'request', 'session', 'sessions', 'status_codes', 'structures', 'urllib3', 'utils', 'warnings']

     

    2.  HTTP协议:

    根据 HTTP 标准, HTTP 请求可以使用多种请求方法。
    HTTP1.0 定义了三种请求方法: GET, POST HEAD 方法。

    HTTP1.1 新增了五种请求方法: 共GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE CONNECT 方法

    3.  requests模块入门:

    #HTTP请求类型
    #get类型
    r = requests.get('https://github.com/timeline.json')
    #post类型
    r = requests.post("http://m.ctrip.com/post")
    #put类型
    r = requests.put("http://m.ctrip.com/put")
    #delete类型
    r = requests.delete("http://m.ctrip.com/delete")
    #head类型
    r = requests.head("http://m.ctrip.com/head")
    #options类型
    r = requests.options("http://m.ctrip.com/get")
    
    #获取响应内容
    print r.content #以字节的方式去显示,中文显示为字符
    print r.text #以文本的方式去显示
    
    #URL传递参数
    payload = {'keyword': '日本', 'salecityid': '2'}
    r = requests.get("http://m.ctrip.com/webapp/tourvisa/visa_list", params=payload) 
    print r.url #示例为http://m.ctrip.com/webapp/tourvisa/visa_list?salecityid=2&keyword=日本
    
    #获取/修改网页编码
    r = requests.get('https://github.com/timeline.json')
    print r.encoding
    r.encoding = 'utf-8'
    
    #json处理
    r = requests.get('https://github.com/timeline.json')
    print r.json() #需要先import json    
    
    #定制请求头
    url = 'http://m.ctrip.com'
    headers = {'User-Agent' : 'Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19'}
    r = requests.post(url, headers=headers)
    print r.request.headers
    
    #复杂post请求
    url = 'http://m.ctrip.com'
    payload = {'some': 'data'}
    r = requests.post(url, data=json.dumps(payload)) #如果传递的payload是string而不是dict,需要先调用dumps方法格式化一下
    
    #post多部分编码文件
    url = 'http://m.ctrip.com'
    files = {'file': open('report.xls', 'rb')}
    r = requests.post(url, files=files)
    
    #响应状态码
    r = requests.get('http://m.ctrip.com')
    print r.status_code
        
    #响应头
    r = requests.get('http://m.ctrip.com')
    print r.headers
    print r.headers['Content-Type']
    print r.headers.get('content-type') #访问响应头部分内容的两种方式
        
    #Cookies
    url = 'http://example.com/some/cookie/setting/url'
    r = requests.get(url)
    r.cookies['example_cookie_name']    #读取cookies
        
    url = 'http://m.ctrip.com/cookies'
    cookies = dict(cookies_are='working')
    r = requests.get(url, cookies=cookies) #发送cookies
    
    #设置超时时间
    r = requests.get('http://m.ctrip.com', timeout=0.001)
    
    #设置访问代理
    proxies = {
               "http": "http://10.10.10.10:8888",
               "https": "http://10.10.10.100:4444",
              }
    r = requests.get('http://m.ctrip.com', proxies=proxies)

    4、Requests示例

    json请求

    #!/user/bin/env python
    #coding=utf-8
    import requests
    import json
    
    class url_request():
        def __init__(self):
                """ init """    
    
    if __name__=='__main__':
        headers = {'Content-Type' : 'application/json'}
        payload = {'CountryName':'中国',
                   'ProvinceName':'陕西省',
                   'L1CityName':'汉中',
                   'L2CityName':'城固',
                   'TownName':'',
                   'Longitude':'107.33393',
                   'Latitude':'33.157131',
                   'Language':'CN'
                   }
        r = requests.post("http://www.xxxxxx.com/CityLocation/json/LBSLocateCity",headers=headers,data=payload)
        #r.encoding = 'utf-8'
        data=r.json()
        if r.status_code!=200:
            print "LBSLocateCity API Error " + str(r.status_code)
        print data['CityEntities'][0]['CityID'] #打印返回json中的某个key的value
        print data['ResponseStatus']['Ack']
        print json.dumps(data,indent=4,sort_keys=True,ensure_ascii=False) #树形打印json,ensure_ascii必须设为False否则中文会显示为unicode

    xml请求

    #!/user/bin/env python
    #coding=utf-8
    import requests
    
    class url_request():
        def __init__(self):
                """ init """    
    
    if __name__=='__main__':
        
        headers = {'Content-type': 'text/xml'}
        XML = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><Request xmlns="http://tempuri.org/"><jme><JobClassFullName>WeChatJSTicket.JobWS.Job.JobRefreshTicket,WeChatJSTicket.JobWS</JobClassFullName><Action>RUN</Action><Param>1</Param><HostIP>127.0.0.1</HostIP><JobInfo>1</JobInfo><NeedParallel>false</NeedParallel></jme></Request></soap:Body></soap:Envelope>'
        url = 'http://jobws.push.mobile.xxxxxxxx.com/RefreshWeiXInTokenJob/RefreshService.asmx'
        r = requests.post(url,headers=headers,data=XML)
        #r.encoding = 'utf-8'
        data = r.text
        print data
  • 相关阅读:
    asp复制到word实现分页效果
    玩转网络MAC地址
    取消开机画面的登录
    C#调用vc的dll.设置参数等
    C++中类的静态数据成员函数解析
    吉林大学vc6.0视频记录
    根据进程号获取程序名
    (转)C#中Split分隔字符串的应用(C#、split、分隔、字符)
    MSSQL表别名使用注意事项
    (转)ArrayList 与 string[] 的转换
  • 原文地址:https://www.cnblogs.com/VseYoung/p/requests.html
Copyright © 2011-2022 走看看