HTTP 协议
HTTP: Hypertext Transfer Protocol.
URL:是通过http协议存取资源的一个Internet路径,对应一个数据资源。
格式: http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80
path:请求资源的路径
requests的7个方法:
1. requests.request()
requests.request(method,url,**kwargs)
#methon 请求方式 对应以上7种方法
#url 对应请求资源
#13个控制访问参数
**kwargs
1.params:字典或字节序列作为参数增加到url
例如:
>>> kv = {'k1':'v1','k2':'v2'}
>>> r = requests.request('GET','http://python123.io/ws',params = kv)
>>> print(r.url)
https://python123.io/ws?k1=v1&k2=v2
2.data: 字典、字节或文件对象,作为Request的内容
r = requests.request('POST','http://python123.io/ws',data = kv)
3.json:JSON格式的内容作为Request的内容
#kv为json格式
r = requests.request('POST','http://python123.io/ws',json = kv)
4.headers:字典,定制http头
#kv为字典
kv = {'user-agent':'chrome/10'}
r = requests.request('POST','http://python123.io/ws',headers = kv)
5.cookies:字典或CookieJar,Request中的cookie
6.auth:元组,支持http认证功能
7.files: 字典,传输文件
#向链接提交文件
fs = {'file': open('data.xls','rb')}
r = requests.request('POST','http://python123.io/ws',files = fa)
8.timeout :设定超时时间,s为单位
r = requests.request('GET','http://www.baidu.com',timeout =10)
9.proxies:字典类型,设定访问服务器,增加登录认证
#隐藏用户IP地址
pxs = {'http': 'http://user:pass@10.10.10.1:1234','https'://10.10.10.1:4321'}
r = requests.request('GET', 'http://www.baidu.com',proxies = pxs)
10.allow_redirects: True/False,默认为True,重定向开关
11.stream:True/False,默认获取内容立即下载开关
12.verify:True/False ,默认认证SSL证书
13.cert:本地SSL证书路径
2.requests.get() #获取资源
requests.get(*url*,*params=None*,***kwarges*)
3. requests.head()#获取头部信息
r = requests.head(url)
r.headers
4.requests.post()#原资源后附加数据
>>> payload = {'key1':'value1','key2':'value2'}
# data = str,"data" = str;data = dict, "form" = dict
>>> r = requests.post('http://httpbin.org/post',data = payload)
>>> print(r.text)
{
"data": "",
"form": {
"key1": "value1",
"key2": "value2"
}
}
5. requests.put()#覆盖URL位置资源
与post类似,但原资源被覆盖
6. requests.patch()#修改资源
7.requests.delete()#删除资源
例子
import requests
r = requests.get('http://www.baidu.com)
r.status_code
r.encoding = 'utf-8'
r.text
Response对象的属性
import requests
r = requests.get('http://www.baidu.com')
r.status_code
type(r)
r.headers
-
r.status_code
200表示成功,404失败 -
r.text
url对应的内容 -
r.encoding
header中猜测的响应内容编码方式 -
r.apparent_encoding
从内容中分析出的响应内容编码方式 -
r.content
http相应内容的二进制形式
-
r.request.headers
请求头部信息
-
r.raise_for_status()
若不是200引发http error
Requests库6种常见异常
- requests.ConnectionError
- requests.HTTPError
- requests.URLRequired
- requests.TooManyRedirects
- requests.ConnectionTimeout
- requests.Timeout
Respose对象异常
r.raise_for_status()
#如果不是200 ,产生requests.HTTPError
通用代码框架
import requests
def getHtmlText(url):
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return '产生异常'
if __name__ == '__main__':
url = 'http://www.baidu.com'
print(getHtmlText(url))
网友评论