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

  • 相关阅读:
    防删没什么意思啊,直接写废你~
    绝大多数情况下,没有解决不了的问题,只有因为平时缺少练习而惧怕问题的复杂度,畏惧的心理让我们选择避让,采取并不那么好的方案去解决问题
    Java 模拟面试题
    Crossthread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created on
    一步步从数据库备份恢复SharePoint Portal Server 2003
    【转】理解 JavaScript 闭包
    Just For Fun
    The database schema is too old to perform this operation in this SharePoint cluster. Please upgrade the database and...
    Hello World!
    使用filter筛选刚体碰撞
  • 原文地址:https://www.cnblogs.com/kylinlin/p/5243475.html
Copyright © 2011-2022 走看看