Python学习之Requests库
来源:互联网 发布:数据统计专业 编辑:程序博客网 时间:2024/05/23 02:05
python中的Requests库是封装好的用来请求http并返回对应结果的python用具
初识Requests库
官方文档
http://cn.python-requests.org/zh_CN/latest/代码地址
https://github.com/kennethreitz/requests
Requests环境准备
- 安装pip
https://pypi.python.org/pypi/pip#downloads
点击上面的连接下载pip,完成后解压到本地目录,在cmd命令行下进入解压目录执行下面命令:
python setup.py install
完成之后,在命令行下执行pip命令,会发现依然找不到该命令
我们需要配置一下pip环境变量,这个命令在python的安装路径下,我这里是”C:\Python27\Scripts”,此时我们的pip命令就可以正常使用了
- 安装Requests库
解决eclipse引入requests失败
上面,我们已经安装好了requests库,但是我们发现,在eclipse中引入时候,还是会出现这样的错误哦:
Unused import: requestsUnresolved import: requests
可以通过下面的步骤解决:
- 下载python request源代码https://github.com/kennethreitz/requests
将下载的requests库代码,拷贝到python的安装根目录下
进入 目录,安装requests包
- eclipse配置
此时我们的eclipse就可以正确的识别requests库了
测试服务端
到现在,请求端的requests已经配置好了,那么我们要请求的服务端是多种多样的,这里requests作者自己写了一个服务端,我们可以使用这个服务端来测试我们写的requests是否有效
http://httpbin.org/
urllib简单使用
在python中为我们提供了一个访问url的系统库,下面我使用这个库访问上面的链接,并且打印出当前的header和body
import urllib2import urlliburl_ip = 'http://httpbin.org/ip'def use_urllib2(): response = urllib2.urlopen(url_ip) print '>>>>Response Headers:' print response.info() print '>>>>Response Body:' print ''.join([line for line in response.readlines()])use_urllib2()
此时效果如下:
使用urllib2添加请求参数
import urllib2import urllibdef use_params_urllib2(): url_get = "http://httpbin.org/get" # 构建请求参数 params = urllib.urlencode({'param1':'hello','param2':'world'}) print '>>>Request params is :' print params respsonse = urllib2.urlopen('?'.join([url_get,'%s']) % params) print '>>>>Response Headers:' print respsonse.info() print '>>>>Code is :' print respsonse.getcode() print '>>>>Response Body:' print ''.join([line for line in respsonse.readlines()])use_params_urllib2()
使用requests
使用requests请求url
import requesturl_ip = 'http://httpbin.org/ip'def use_requests(): response = requests.get(url_ip) print '>>>>Response Headers:' print response.headers print '>>>>Response Body:' print response.textuse_requests()
使用requests传递参数
import requestsurl_ip = 'http://httpbin.org/ip'def use_params_requests(): params = {'param1':'hello','param2':'world'} print '>>>Request params is :' print params response = requests.get(url_get, params) print '>>>>Response Headers:' print response.headers print '>>>>Code is :' print response.status_code print '>>>>Response Body:' print response.json()use_params_requests()
requests库的使用
下面我们使用github提供给我们的文档,来学习使用requests库的功能
https://developer.github.com/v3/users/
可以看到,这里我们使用’/users/username’就可以获取到对应的用户信息
import requestsimport jsonurl = 'https://api.github.com'#构建url,在url后添加endpointdef build_uri(endpoint): print '/'.join([url,endpoint]) return '/'.join([url,endpoint])# 使打印出的json按照4个空格缩进def better_print(json_str): return json.dumps(json.loads(json_str), indent=4)def request_method(): response = requests.get(build_uri('users/mockingbirds')) print better_print(response.text)if __name__ == '__main__': request_method()
此时输出结果如下:
requests库带参数的请求
使用patch方法修改用户信息
requests.get('url', params={'params1':'hello'})
使用requests传递参数修改用户参数
def json_request(): response = requests.patch(build_uri('user'), auth=('mockingbirds','这里填写github用户密码'),json={'company':'tencent'}) print better_print(response.text) print response.request.headers print response.request.body print response.status_codeif __name__ == '__main__': json_request()
可以看到,此时已经正确修改过来了
使用post方法增加邮箱地址
另外,我们可以根据github提供给我们的api,来使用post方法,增加两个和账号对应的邮箱地址
def json_post(): response = requests.post(build_uri('user/emails'), auth=('mockingbirds','github用户密码'),json=['hello@github.com','world@github.com']) print better_print(response.text) print response.request.headers print response.request.body print response.status_codeif __name__ == '__main__': json_post()
requests库请求异常处理
def request_except(): NETWORK_STATUS = True try: requests.get('https://developer.github.com', timeout=10) except requests.exceptions.ConnectTimeout: NETWORK_STATUS = False print(NETWORK_STATUS)if __name__ == '__main__': request_except()
requests下载文件
import requestsurl = 'https://img1.doubanio.com/view/photo/photo/public/p2453514758.jpg'def download_file(): response = requests.get(url, stream=True) from contextlib import closing with closing(requests.get(url, stream=True)) as response: if response.status_code == 200: with open('file.jpg','wb') as fd: for fun in response.iter_content(128): fd.write(fun)if __name__ == '__main__': download_file()
requests库http认证
之前我们获取和修改用户email列表需要手动传入用户密码,这样其实是很不安全的,可以在github中生成一个token,这个token是由github自己管理的,不过我们可以使用这个token进行认证相关的操作
https://github.com/settings/tokens/new
def base_oauth(): headers = {'Authorization':'token f12100a704408ee8bc4fe74a04a612570067adb8'} response = requests.get('https://api.github.com/user/emails', headers=headers) print response.request.headers print response.text print response.status_codeif __name__ == '__main__': base_oauth()
此时效果如下:
其实呢,requests库为我们提供了封装好的方法,不用手动指定headers
from requests.auth import AuthBaseclass GithubAuth(AuthBase): def __init__(self, token): self.token = token def __call__(self, r): r.headers['Authorization'] = ''.join(['token', self.token]) return r def oauth_impove(): auth = GithubAuth('f12100a704408ee8bc4fe74a04a612570067adb8'); response = requests.get('https://api.github.com/user/emails', auth=GithubAuth('f12100a704408ee8bc4fe74a04a612570067adb8')) print response.textif __name__ == '__main__': oauth_impove()
ok,几天就到这里了
- python学习之 requests库
- Python学习之Requests库
- Python之requests库
- python库之requests
- Python 学习之<Requests入门>
- python模块之requests学习
- Python 第三方 http 库-Requests 学习
- Python 第三方 http 库-Requests 学习
- Python 第三方 http 库-Requests 学习
- Python爬虫库学习笔记-requests
- Python模块学习 - Requests
- python requests 模块学习
- python学习5:requests
- Python Requests 学习笔记
- python简洁之道-----Requests库
- Python网络爬虫之Requests库
- Python库之Requests(iMooc)---(1)
- Python库之Requests(iMooc)---(2)
- 读写锁(read-write lock)机制-----多线程同步问题的解决
- 数值分解
- pcDuino---上网设置
- 用maven配置ssh框架
- Java线程死锁的简单例子
- Python学习之Requests库
- 2567 谷仓维修 (贪心)
- leetcode15. 3Sum
- Nginx
- Momentum(动量/冲量)的理解及应用
- 获取未安装的APK图标、版本、包名、名称、是否安装、安装、打开
- JAVA线程池----ThreadPoolExecutor机制
- 区块链的基本概念
- jzoj P1026【GDOI2005】积木分发