zoukankan      html  css  js  c++  java
  • Requests库的几种请求

    本文内容来源:https://www.dataquest.io/mission/117/working-with-apis

    本文的数据来源:https://en.wikipedia.org/wiki/International_Space_Station

    本文摘要:通过requests库和github的api来操作github仓库,从而熟悉一下与网络数据交互的过程

    API(Application Program Interface)的作用是查询和返回网络上的动态数据,譬如股票的价格信息和新闻的实时评论。通过API获取数据的过程就像你访问一个网页一样,向服务器提交请求,然后服务器返回相应的数据。通常使用requests库(http://www.python-requests.org/en/latest/)来提交请求的,本文所用的github的API地址为:https://developer.github.com/v3/

     

    获取访问令牌

    要想通过api来操作你的github,必须要先在github的网址(https://github.com/settings/tokens)上生成一个访问令牌

    Image 001

    使用访问令牌而不是用用户名和密码的原因有两个:

    1. 通常放入了程序中的用户名和密码是很容易泄密的,别人看到了你的代码后知道了用户名和密码就能进行任意的操作。而如果有人使用了你的访问令牌,你可以随时注销掉该令牌
    2. 访问令牌是可以进行细粒度的权限配置,你可以设置该令牌只能查看你的github,从而保证了安全

    Image 002

    图片1

     

    获取到了访问令牌后,记得马上复制下来,并记录在程序中,往后的所有requests都必须带着这个访问令牌,记得必须要有token字段

    {"Authorization": "token 975ef3a9dff1a7dc50d5f0a4341ecf5a89f201ab"}

    注意:本文中的所有出现kylinlin的地方都要替换为你的账户名

     

    GET请求

    GET请求用户从服务器中获取信息

    # 获取授权用户的信息
    
    import requests
    
    headers = {"Authorization": "975ef3a9dff1a7dc50d5f0a4341ecf5a89f201ab"} # 前两行会在后面的代码中忽略掉不写
    
    user = requests.get('https://api.github.com/user', headers=headers).json()
    
    print user
    
    #如果get()方法里没有headers参数,则会返回如下结果:(表示要求认证)
    
    {u'documentation_url': u'https://developer.github.com/v3', u'message': u'Requires authentication'}
    
    但并不是所有的方法都必须要带上headers参数
    
    获取个人信息(将kylinlin替换为任意的帐户名都可以)
    
    response = requests.get("https://api.github.com/users/kylinlin")
    
    print response.status_code 
    
    print response.json()

    每一个访问都会生成一个状态码,用属性status_code表示,这个状态码用来表示这个访问的结果:

    1. 200 -- 一切正常,返回了要求的结果
    2. 301 -- 服务器将该请求重定向到其他网站
    3. 401 -- 身份认证出错
    4. 400 -- 服务器认为这是一个错误请求
    5. 403 -- 你无权访问该资源
    6. 404 -- 访问的资源不存在

    一个请求返回的内容默认是字符串格式,要提取该内容中的某些信息,最方便的方法就是将字符串转换成python对象,而json()方法用来实现这个功能的。

    在get方法里带上参数,requests.get()方法里的params参数就是url里的参数,与headers参数不同,headers参数的值会写在请求头里,而params参数的值会写在url里,譬如要获取github作者所关注的项目,并将50条结果作为一页,获取第一页的内容。此时的url实际上是这样的:https://api.github.com/users/kylinlin/starred?pre_page=50&page=1

    params = {"per_page": 50, "page": 1}
    
    response = requests.get("https://api.github.com/users/kylinlin/starred", params=params)
    
    page1_repos = response.json()
    
    print page1_repos

     

    POST请求

    POST请求用于向服务器发送信息,然后在服务器上创建对象,譬如要创建一个新的项目

    payload = {'name':'learning-about-apis'}  # name参数的值是要创建的项目名称
    
    status = requests.post('https://api.github.com/user/repos',
    
        headers=headers, json=payload).status_code # json参数会将payload变量转化为字典格式
    
    print status   # 输出201就表明项目创建成功

    Image 004

     

    PATCH和PUT请求

    有时候我们只是要更新一个项目的信息,此时就可以使用PATCH或PUT方法,譬如要更新刚才创建的项目的描述信息

    payload = {'description': 'Learning about requests!', 'name': 'learning-about-apis'}
    
    status = requests.patch('https://api.github.com/repos/kylinlin/learning-about-apis', json=payload, headers=headers).status_code
    
    print status
    
    # patch方法成功后会返回200

    Image 005

    DELETE请求

    DELETE请求用于删除服务器上的对象,譬如要删除刚才的项目

    status = requests.delete('https://api.github.com/repos/kylinlin/learning-about-apis',
    
        headers=headers).status_code 
    
    print status
    
    #输出204就表示删除成功

    Image 003

  • 相关阅读:
    bom案例2-弹出层
    bom案例1-div拖拽
    bom-scroll
    bom-client
    bom-offset
    9. 阻塞队列
    8. 读写锁
    7. CountDownLatch、CyclicBarrier、Semaphore
    6. Callable
    5. 集合不安全
  • 原文地址:https://www.cnblogs.com/kylinlin/p/5243475.html
Copyright © 2011-2022 走看看