python request库用法_Python学习之Requests库

python中的Requests库是封装好的用来请求http并返回对应结果的python用具

初识Requests库

Requests环境准备

安装pip

https://pypi.python.org/pypi/pip#downloads

点击上面的连接下载pip,完成后解压到本地目录,在cmd命令行下进入解压目录执行下面命令:

python setup.py install

完成之后,在命令行下执行pip命令,会发现依然找不到该命令

20170402110031106

我们需要配置一下pip环境变量,这个命令在python的安装路径下,我这里是”C:\Python27\Scripts”,此时我们的pip命令就可以正常使用了

20170402110352014

安装Requests库

20170402110821564

解决eclipse引入requests失败

上面,我们已经安装好了requests库,但是我们发现,在eclipse中引入时候,还是会出现这样的错误哦:

Unused import: requests

Unresolved import: requests

可以通过下面的步骤解决:

将下载的requests库代码,拷贝到python的安装根目录下

20170402111640598

进入 目录,安装requests包

20170402112121144

eclipse配置

20170402112552805

此时我们的eclipse就可以正确的识别requests库了

20170402112638962

测试服务端

到现在,请求端的requests已经配置好了,那么我们要请求的服务端是多种多样的,这里requests作者自己写了一个服务端,我们可以使用这个服务端来测试我们写的requests是否有效

http://httpbin.org/

urllib简单使用

在python中为我们提供了一个访问url的系统库,下面我使用这个库访问上面的链接,并且打印出当前的header和body

import urllib2

import urllib

url_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()

此时效果如下:

20170402130827530

使用urllib2添加请求参数

import urllib2

import urllib

def 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()

20170402132051138

使用requests

使用requests请求url

import request

url_ip = 'http://httpbin.org/ip'

def use_requests():

response = requests.get(url_ip)

print '>>>>Response Headers:'

print response.headers

print '>>>>Response Body:'

print response.text

use_requests()

20170402133000229

使用requests传递参数

import requests

url_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()

20170402134025558

requests库的使用

下面我们使用github提供给我们的文档,来学习使用requests库的功能

https://developer.github.com/v3/users/

20170402143402506

可以看到,这里我们使用’/users/username’就可以获取到对应的用户信息

import requests

import json

url = 'https://api.github.com'

#构建url,在url后添加endpoint

def 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()

此时输出结果如下:

20170402143657622

requests库带参数的请求

使用patch方法修改用户信息

requests.get('url', params={'params1':'hello'})

使用requests传递参数修改用户参数

20170402145834354

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_code

if __name__ == '__main__':

json_request()

20170402145726265

可以看到,此时已经正确修改过来了

使用post方法增加邮箱地址

另外,我们可以根据github提供给我们的api,来使用post方法,增加两个和账号对应的邮箱地址

20170402150616179

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_code

if __name__ == '__main__':

json_post()

20170402150933652

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 requests

url = '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_code

if __name__ == '__main__':

base_oauth()

此时效果如下:

20170402174912798

其实呢,requests库为我们提供了封装好的方法,不用手动指定headers

from requests.auth import AuthBase

class 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.text

if __name__ == '__main__':

oauth_impove()

ok,几天就到这里了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值