Requests库的几种请求 - 通过API操作Github
本文内容来源: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)上生成一个访问令牌

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


获取到了访问令牌后,记得马上复制下来,并记录在程序中,往后的所有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表示,这个状态码用来表示这个访问的结果:
- 200 -- 一切正常,返回了要求的结果
- 301 -- 服务器将该请求重定向到其他网站
- 401 -- 身份认证出错
- 400 -- 服务器认为这是一个错误请求
- 403 -- 你无权访问该资源
- 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就表明项目创建成功

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

DELETE请求
DELETE请求用于删除服务器上的对象,譬如要删除刚才的项目
status = requests.delete('https://api.github.com/repos/kylinlin/learning-about-apis',
    headers=headers).status_code 
print status
#输出204就表示删除成功

Requests库的几种请求 - 通过API操作Github的更多相关文章
- 大概看了一天python request源码。写下python requests库发送 get,post请求大概过程。
		python requests库发送请求时,比如get请求,大概过程. 一.发起get请求过程:调用requests.get(url,**kwargs)-->request('get', url ... 
- 用python的Requests库模拟http请求
		一.先了解几个重要的http请求头或响应头信息 Request Headers: Host: 描述请求将被发送的目的地,包括,且仅仅包括域名和端口号. Origin: 说明请求从哪里发起的,包括,且仅 ... 
- requests库和urllib包对比
		python中有多种库可以用来处理http请求,比如python的原生库:urllib包.requests类库.urllib和urllib2是相互独立的模块,python3.0以上把urllib和ur ... 
- python WEB接口自动化测试之requests库详解
		由于web接口自动化测试需要用到python的第三方库--requests库,运用requests库可以模拟发送http请求,再结合unittest测试框架,就能完成web接口自动化测试. 所以笔者今 ... 
- python爬虫入门三:requests库
		urllib库在很多时候都比较繁琐,比如处理Cookies.因此,我们选择学习另一个更为简单易用的HTTP库:Requests. requests官方文档 1. 什么是Requests Request ... 
- python接口自动化测试之requests库详解
		前言 说到python发送HTTP请求进行接口自动化测试,脑子里第一个闪过的可能就是requests库了,当然python有很多模块可以发送HTTP请求,包括原生的模块http.client,urll ... 
- 爬虫入门  requests库
		写在最前的具体资料: https://2.python-requests.org//zh_CN/latest/user/quickstart.html https://www.liaoxuefeng. ... 
- python爬虫(1)requests库
		在pycharm中安装requests库的一种方法 首先找到设置 搜索然后安装,蓝色代表已经安装 requests库中的get请求 与HTTP协议相对应,requests库也有七种请求方式. 获取ur ... 
- python requests库与json数据处理详解
		1. http://docs.python-requests.org/zh_CN/latest/user/quickstart.html get方法将参数放在url里面,安全性不高,但是效率高:pos ... 
随机推荐
- 沈逸老师PHP魔鬼特训笔记(9)--进化
			回到第一课,我们学过PHP母体,了解过解析PHP程序.PHP其实内置了一个web服务器,专门给我们开发测试使用,那么接下来我们要完成的是:生成后创建一个web 服务,在浏览器中可以访问. PHP的母体 ... 
- iOS中的加密方式 与  文件解压缩
			1.Base64加密方式 Base64是一种加密方法,可逆的加密. Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符./ + 填充 = echo -n BC|base6 ... 
- Oracle 常用的SQL语法和数据对象
			一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSE ... 
- 20145102 《Java程序设计》第2周学习总结
			20145102 <Java程序设计>第2周学习总结 教材学习内容总结 这章先介绍了基本类型,和其他语言相似,分为short整数(2字节).int整数(4字节).long整数(8字节).f ... 
- UIBootatrap:是由AngularJS UI团队编写的纯AngularJS实现的Bootstrap组件
			本文为翻译文档.原文是https://angular-ui.github.io/bootstrap/(需要FQ). 准备工作: 依赖关系:这个库中包含一组基于Bootstrap组件和CSS的原生Ang ... 
- 剑指Offer11 在O(1)内删除链表结点
			/************************************************************************* > File Name: 11_Delete ... 
- hdu 3311 斯坦纳树
			思路:虚拟一个0号节点,将每个点建一条到0号节点的边,权值为挖井需要的价值.并要保证0号节点同另外n个寺庙一样被选择即可. 然后就是求斯坦纳树了. #include<map> #inclu ... 
- hdu 4739 状压DP
			这里有状态压缩DP的好博文 题目:题目比较神,自己看题目吧 分析: 大概有两种思路: 1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过. 2.状压DP,先 ... 
- 多线程的练习----妖,等待唤醒,代码重构,lock到condition
			× 目录 [1]需求 [2]妖的出现和解决 [3]等待唤醒 [4]代码重构 [5]改成Lock Condition ------------------------------------- 1,需求 ... 
- Android OpenGL ES(二)----平滑着色
			直线或者三角形上的每个片段混合后的颜色可以用一个varying生成.我们不仅能混合颜色,还可以给varying传递任何值,OpenGL会选择属于那条直线的两个值,或者属于那个三角形的三个值,并平滑地在 ... 
