Python学习之Requests库

本文介绍了Python中的Requests库,包括其安装、配置及使用方法。详细解释了如何通过Requests库发送HTTP请求、处理响应数据,以及如何处理异常情况。此外,还介绍了如何利用GitHub API进行带参数的请求操作。

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

初识Requests库

Requests环境准备

python setup.py install

完成之后,在命令行下执行pip命令,会发现依然找不到该命令
这里写图片描述
我们需要配置一下pip环境变量,这个命令在python的安装路径下,我这里是”C:\Python27\Scripts”,此时我们的pip命令就可以正常使用了
这里写图片描述

  • 安装Requests库
    这里写图片描述

解决eclipse引入requests失败

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

Unused import: requests
Unresolved 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 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()   

此时效果如下:
这里写图片描述

使用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()

这里写图片描述

使用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()   

这里写图片描述

使用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()

这里写图片描述

requests库的使用

下面我们使用github提供给我们的文档,来学习使用requests库的功能
https://developer.github.com/v3/users/
这里写图片描述

可以看到,这里我们使用’/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()

此时输出结果如下:
这里写图片描述

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_code

if __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_code

if __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 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()

此时效果如下:
这里写图片描述

其实呢,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,几天就到这里了

<think>好的,我现在需要帮助用户学习如何使用Pythonrequests进行网络请求。首先,用户明确提到想要一个使用教程和示例,所以我应该从基础开始,逐步介绍常用的HTTP方法,比如GET和POST,以及错误处理和高级功能,比如设置请求头和代理。 首先,用户的问题是关于requests的使用,所以我需要确保覆盖主要的请求类型。根据引用[4],GET请求可以通过params参数传递URL参数,这应该作为第一个示例。然后,POST请求通常需要传递数据,比如表单或JSON,这也是常见的用例。 接下来,错误处理部分,引用[1]提到了Requests可以抛出异常,比如HTTPError和Timeout,所以需要在教程中加入try-except块来处理这些异常,确保用户知道如何捕获和处理常见的网络问题。 另外,用户提供的引用[3]提到了代理请求,这部分可以作为高级用法来介绍。安装requests之后,设置代理的方法需要详细说明,比如在get方法中传递proxies参数。 然后,请求头的设置也很重要,引用[4]中提到了在GET请求中设置请求头的例子,所以这里应该包括如何自定义User-Agent或其他头部信息。 关于安装部分,用户可能已经知道,但为了完整性,还是应该简要提及,如引用[3]所示,使用pip安装requests。 在组织内容时,需要按照逻辑顺序,从安装到基本请求,再到高级功能,最后是错误处理。每个部分都应有代码示例,并保持代码简洁,符合用户提供的示例中的格式,比如使用代码块,并确保语法正确。 同时,用户要求生成相关问题,可能需要包括性能优化、会话对象的使用、文件上传、证书验证等,这些问题可以帮助用户进一步探索。 最后,检查所有引用是否正确对应,比如引用[1]关于异常处理,引用[3]关于代理,引用[4]关于GET参数和请求头。确保引用标记正确,没有遗漏或错误。 现在需要确保回答结构清晰,分步骤讲解,每个部分都有示例代码,并且自然融入引用。同时,问题部分需要涵盖用户可能感兴趣的后续主题,比如会话管理、文件上传、身份验证等。</think>### Python Requests使用教程 #### 一、安装与基础使用 1. **安装** 使用pip安装(如引用[3]所述): ```bash pip install requests ``` 2. **发送GET请求** 通过`params`传递URL参数(如引用[4]示例): ```python import requests params = {'q': 'requests+language:python'} response = requests.get('https://api.github.com/search/repositories', params=params) print(response.status_code) # 输出状态码 print(response.json()) # 解析JSON响应 ``` 3. **自定义请求头** 添加`headers`参数模拟浏览器访问: ```python headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get('https://example.com', headers=headers) ``` --- #### 二、POST请求与数据提交 1. **提交表单数据** 使用`data`参数发送表单: ```python data = {'username': 'admin', 'password': 'test'} response = requests.post('https://httpbin.org/post', data=data) ``` 2. **发送JSON数据** 使用`json`参数自动序列化: ```python json_data = {'key': 'value'} response = requests.post('https://api.example.com/submit', json=json_data) ``` --- #### 三、错误处理(如引用[1]示例) ```python from requests.exceptions import HTTPError, Timeout try: response = requests.get('https://api.github.com', timeout=1) response.raise_for_status() # 检查HTTP错误 except HTTPError as http_err: print(f'HTTP错误: {http_err}') except Timeout as timeout_err: print(f'超时错误: {timeout_err}') except Exception as err: print(f'其他错误: {err}') ``` --- #### 四、高级功能 1. **代理设置**(如引用[3]所述) 通过`proxies`参数配置代理: ```python proxies = {'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080'} response = requests.get('https://example.com', proxies=proxies) ``` 2. **会话保持** 使用`Session`对象复用TCP连接: ```python with requests.Session() as s: s.get('https://example.com/login') # 保持Cookies response = s.get('https://example.com/dashboard') ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值