您好,欢迎来到二三四教育网。
搜索
您的当前位置:首页Python HTTP 库:requests 入门

Python HTTP 库:requests 入门

来源:二三四教育网

初识 requests
在网络编程中,最最基本的任务包含:

import urllib2
import json

gh_url  = 
cs_user = 'user'
cs_psw  = 'password'

req = urllib2.Request(gh_url)

password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, gh_url, cs_user, cs_psw)

auth_manager = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_manager)

urllib2.install_opener(opener)

handler = urllib2.urlopen(req)

if handler.getcode() == requests.codes.ok:
    text = handler.read()
    d_text = json.loads(text)
    for k, v in d_text.items():
        print k, v

如果运行正确,那么代码应该返回:

issues_url 
current_user_repositories_url 
rate_limit_url 
repository_url 
...
user_repositories_url 
team_url 

同样的效果,用 requests 库则有如下代码:

import requests

cs_url  = 
cs_user = 'user'
cs_psw  = 'password'

r = requests.get(cs_url, auth=(cs_user, cs_psw))

if r.status_code == requests.codes.ok
    for k, v in r.json().items():
        print k, v
pip install requests

基本用法
requests 的基本用法,呃,真是不能再基本了。最基本的操作,就是以某种 HTTP 方法向远端服务器发送一个请求而已;而 requests 库就是这么做的

import requests

cs_url = 'http://httpbin.org'

r = requests.get("%s/%s" % (cs_url, 'get'))
r = requests.post("%s/%s" % (cs_url, 'post'))
r = requests.put("%s/%s" % (cs_url, 'put'))
r = requests.delete("%s/%s" % (cs_url, 'delete'))
r = requests.patch("%s/%s" % (cs_url, 'patch'))
r = requests.options("%s/%s" % (cs_url, 'get'))

从语法上看,requests 库设计的非常自然。所谓 requests.get,就是以 GET 方式发送一个 REQUEST,得到一个 Response 类的结果,保存为 r。

你可以在 r 中取得所有你想得到的和 HTTP 有关的信息。下面,我们以 GET 方法为例,依次介绍。

URL 传参 / 获取请求的 URL

requests
库提供的 HTTP 方法,都提供了名为 params
的参数。这个参数可以接受一个 Python 字典,并自动格式化为上述格式。

import requests
cs_url = 
param  = {'ie':'utf-8', 'q':'query'}

r = requests.get (cs_url, params = param)
print r.url

运行将得到:

requests 库定义的 Response 类可以方便地获取请求的 HTTP 状态码和重定向状态。

import requests

cs_url = 
param  = {'ie':'utf-8', 'q':'query'}
r = requests.get (cs_url, params = param)
print r.url, r.status_code

cs_url = 
r = requests.get (cs_url, params = param)
print r.url, r.status_code, r.history

结果是:

 200
 200 [<Response [302]>]

我们发现,requests 默认自动地处理了 302 跳转。在经过跳转的请求中,返回的 URL 和状态码都是跳转之后的信息;唯独在 history 中,用 Python 列表记录了跳转情况。

大多数情况下,自动处理是挺好的。不过,有时候我们也想单步追踪页面跳转情况。此时,可以给请求加上 allow_redirects = False 参数。

Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务