Requests库详解

什么是Urllib

内置的一个http请求库,不需要额外的安装,不需要了解底层到底怎么实现。

  • urllib.request    请求模块
  • urllib.error        异常处理模块
  • urllib.parse        url解析模块
  • urllib.robotparser
import urllib2
response = urllib2.urlopen('http://www.baidu.com')


什么是Requests

基于urllib3,Python实现的简单易用的http请求库


相关用法

  • 基本GET请求
import requests

response = requests.get('http://httpbin.org/get')
print response.text   

       请求结果:

{
	"args": {},
	"headers": {
		"Accept": "*/*",
		"Accept-Encoding": "gzip, deflate",
		"Connection": "close",
		"Host": "httpbin.org",
		"User-Agent": "python-requests/2.19.1"
	},
	"origin": "223.104.213.74",
	"url": "http://httpbin.org/get"
}

  • 带参数的GET请求,字典方式传值
import requests

data = {
        'name': 'lt',
        'age': 18
    }

response = requests.get('http://httpbin.org/get', params=data)
print response.text

        请求结果:

{
	"args": {
		"age": "18",
		"name": "lt"
	},
	"headers": {
		"Accept": "*/*",
		"Accept-Encoding": "gzip, deflate",
		"Connection": "close",
		"Host": "httpbin.org",
		"User-Agent": "python-requests/2.19.1"
	},
	"origin": "223.104.213.74",
	"url": "http://httpbin.org/get?age=18&name=lt"
}

  • 解析Json
import requests

data = {
        'name': 'lt',
        'age': 18
    }

response = requests.get('http://httpbin.org/get', params=data)
print response.json()

  • 获取二进制数据
import requests

response = requests.get('https://ss1.bdstatic.com/kvoZeXSm1A5BphGlnYG/skin_zoom/178.jpg?2')
with open('e:/aaa.jpg', 'wb') as f:
    f.write(response.content)
    f.close()

  • 添加一个headers,伪装

       不加headers,返回400:

import requests

response = requests.get('https://www.zhihu.com/')
print response.status_code

        加了之后,返回200:

import requests

headers = {
    'user-agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
    }
response = requests.get('https://www.zhihu.com/', headers = headers)
print response.status_code

  • POST请求
import requests

data = {
    'aaaa' : 'bbbb'
    }
response = requests.post('http://httpbin.org/post', data = data)
print response.json()


响应

response属性

  • status_code
  • headers
  • cookies
  • url
  • history

状态码的判断

import requests

response = requests.post('http://httpbin.org/post')
print response.status_code == 200



高级操作

  • 文件上传
import requests

files = {'file': open('e:/aaa.jpg', 'rb')}
response = requests.post('http://httpbin.org/post',files = files)
print response.json()

  • 获取cookies
import requests

response = requests.get('http://www.baidu.com')
print response.cookies
for key,value in response.cookies.items():
    print(key + ' = ' + value)

  • 会话维持(用作登录验证)

       如果是:

import requests

requests.get('http://httpbin.org/cookies/set/number/123456')
response = requests.get('http://httpbin.org/cookies')
print response.text
       返回
{"cookies":{}}

       改为:

import requests

s = requests.session()
s.get('http://httpbin.org/cookies/set/number/123456')
response = s.get('http://httpbin.org/cookies')
print response.text

        返回:

{"cookies":{"number":"123456"}}


  • 证书验证

证书是不合法的,这种情况下会报

requests.exceptions.SSLError

import requests

response = requests.get('https://www.12306.cn')
print response.status_code

改为

import requests
import urllib3

urllib3.disable_warnings() #消除警告
response = requests.get('https://www.12306.cn', verify=False)
print response.status_code

  • 代理设置
import requests

proxies = {
    'http':'http://127.0.0.1:8743',
    'https':'https://127.0.0.1:9743'
    }
response = requests.get('https://www.taobao.com', proxies = proxies)
print response.status_code


  • 超时的设置
import requests

try:
    requests.get('https://www.taobao.com/', timeout=0.1)
except requests.exceptions.ConnectTimeout:
    print 'ConnectTimeout'
except requests.exceptions.Timeout:
    print 'Timeout'
  • 认证设置

auth属性


### 回答1: Pythonrequests是一个用于发送HTTP请求的Python第三方。它可以方便地发送HTTP/1.1请求,并且支持许多HTTP协议的高级功能,如Cookie、SSL/TLS验证、代理等。requests的使用非常简单,可以轻松地发送GET、POST、PUT、DELETE等请求,并且可以方便地处理响应结果。此外,requests还支持会话管理、文件上传、流式请求等高级功能,是Python中最常用的HTTP请求之一。 ### 回答2: Python中的requests是一个非常流行的,用于向URL发送各种HTTP请求。它包含了许多强大的功能,例如支持HTTP和HTTPS协议、文件上传、Cookie和Session等。该的使用方式简单、直接。 Requests的主要功能如下: 1.发送HTTP GET和POST请求 2.支持HTTP和HTTPS协议 3.支持文件上传和下载 4.支持Cookies和Session 5.支持HTTP代理 6.支持URL重定向和认证 7.支持HTTP链接和请求超时设置 8.支持用户自定义参数和头部信息 请求数据: requests的get和post方法是最常用的两种HTTP请求方法。下面是这两种方法的语法格式: response = requests.get(url, params=None, **kwargs) response = requests.post(url, data=None, json=None, **kwargs) - url: 需要请求的API地址; - params: 使用一个字典对象,将请求的键值对以字典的形式传给API; - data: 字符串或字节型数据,将数据作为请求主体提交给API; - json: JSON格式的数据,将数据以JSON的格式作为请求主体提交给API。 响应数据: 响应对象是请求方法的返回值,对于任何的HTTP请求,服务器都会返回一个响应结果。响应结果的包含了HTTP状态码、响应头部以及响应主体。 状态码: HTTP状态码表示了服务器对请求的响应结果类型。可以通过响应对象的.status_code属性获取响应的状态码; 响应头: 在请求的响应中,服务器会返回HTTP头部信息。可以通过响应对象的headers属性获取响应头部信息; 响应内容: 响应内容是服务器对于请求的响应结果主体信息。可以通过响应对象的.text属性获取响应内容。 异常处理: 在Python请求中,HTTP请求可能会发生多种错误,例如请求超时、服务器错误等。这些错误可以通过异常处理来处理。为了确保正常的运行,程序员需要使用try和except语句来捕获异常。对于错误,Requests引发的所有异常都派生自requests.exceptions.RequestException类。 请求头设置: HTTP头部是在HTTP请求过程中传输的关键信息。其中包括了客户端User-Agent、请求日期、请求主体等。在Requests中,可通过headers传入一个字典对象,将键值对以字典的形式传给API。其中,我们可以进行自定义设置, 添加自定义Header头。 请求超时: 请求超时是为了防止请求过程中出现无限期的阻塞,我们可以通过传递一个元结构timeout到对象上来实现请求超时的功能,即如果在timeout(即等待目标服务器响应的时间,秒)的时间内没有得到响应,则会引发一个异常exceptions.TimeoutAlert 。 处理URL重定向: 在许多情况下,API服务提供者为某些请求跳转到新的URL。支持两种状态码,即301和302。为了处理这种自动跳转重定向状态码,Requests提供了支持,我们可以使用其属性allow_redirects。这个属性用于允许重定向,直接设置为True即可。 如果不需要重定向,则直接设置为False。 维持会话: Requests还允许我们在应用程序代码中保持状态,使用requests.Session 会话上下文,以便在同一网站的许多请求之间保留Cookie和Header等信息。会话上下文假定通过使用session的方法和属性,将HTTP请求连接到会话之后进行处理。它会维护不断的状态,直到要关闭所有连接或超时时间到达。例如: import requests #创建一个会话对象 session=requests.Session() #发送请求,requests将会自动保存所有的Cookies值 session.get('http://httpbin.org/cookies/set/sessioncookie/123456789') #获取Cookies值 r=session.get('http://httpbin.org/cookies') print(r.text) 代理设置: 我们可以通过传递proxies 字典属性到requests中,来创建代理服务器。proxies字典对象应包含键值对,其中键是指定的代理协议,值是代理服务器的URI。 证书验证: 默认情况下,Requests会对SSL证书进行验证。如果证书无效或存在问题,则会引发异常。要停用这种验证,我们可以将verify属性设置为False。可以通过将verify属性设置为一个字符串‘ca.pem’或者一段路径使其指向一个.pem的证书,进而进行需求SSL验证。 以上是Requests的一些常见用例及方法,尽管Requests很方便,但是一定要在用之前小心操作,避免发送一些敏感的用户信息甚至是病毒等,对目标服务器造成不必要的伤害,这是任何时候都不能被允许的。 ### 回答3: Python是一种非常流行的编程语言,其在网络编程中的应用也非常广泛。Python RequestsPython第三方中实现HTTP协议的之一,它使得Python程序能够很方便地发送HTTP请求和接收HTTP响应。Requests的常用方法有.get()、post()、put()、delete()等,它们可以实现相应的HTTP请求方式。 Requests的核心是Session类,它可以一次打开一个长期的连接,自动处理cookies,从而为高性能页面下载提供了帮助。它还可以设置一个连接池,对于频繁的请求可直接重用此连接池,提高程序的效率。 Requests使用起来非常方便,在使用前需要导入,然后创建Request对象,设置相应的HTTP请求参数,调用方法发送请求,并接收响应。对于常用的HTTP请求头信息,Requests提供了方便的请求头字典,可以很方便地设置请求头信息。 Requests的常见应用场景有爬虫、测试、接口测试和访问多种Web服务接口等。它非常适用于需要发送HTTP请求和接收HTTP响应的各种应用场景,尤其是需要对各种Web服务API进行测试或抓包分析时非常实用。 总之,Python Requests是一个很好的HTTP,使用它能够方便地实现各种HTTP请求和响应操作,它也是Python标准中最完善的HTTP之一,因此被广泛使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值