4、requests-基础

1、发出一个get请求:

r = requests.get('https://github.com/timeline.json')

返回给我们的r,是一个requets的对象,这个requests的对象中我们可以调用一些属性,方便我们得到更加详细的信息;

r.status_code        # 响应状态码
r.content            # 字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.headers            # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.json               # Requests中内置的JSON解码器
r.url                # 获取url
r.encoding           # 编码格式
r.cookies            # 获取cookie
r.raw                # 返回原始响应体
r.text               # 字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.raise_for_status() # 失败请求(非200响应)抛出异常

同时,get方法可以接受参数:

# -*- coding:utf-8 -*-

import requests
# 字典的形式填充参数 params
= {'k1': 'v1', 'k2': 'v2'} r = requests.get('http://www.baidu.com', params=params)

get请求,是将参数添加到url上:

http://www.baidu.com/?k2=v2&k1=v1

同时你也可以把列表当做字典的值传到url中:

params = {'k1': 'v1', 'k2': ['v2', 'v3', 'v4']}

r = requests.get('http://www.baidu.com', params=params)

#得到的url:http://www.baidu.com/?k2=v2&k2=v3&k2=v4&k1=v1

添加请求头:

params = {'k1': 'v1', 'k2': ['v2', 'v3', 'v4']}
header = {'k1': 'v1', 'k2': 'v2'}

r = requests.get('http://www.baidu.com', params=params, headers=header)

2、发起一个post的请求:

import requests

params = {'k1': 'v1', 'k2': ['v2', 'v3', 'v4']}
header = {'k1': 'v1', 'k2': 'v2'}

r = requests.post('http://httpbin.org/post', data=params, headers=header)

当然我们可以使用post传递json文件:

import requests
import json

params = {'k1': 'v1', 'k2': ['v2', 'v3', 'v4']}
header = {'k1': 'v1', 'k2': 'v2'}
# 使用json库,序列化python数据类型为json字符串 json_data
= json.dumps(params) r = requests.post('http://httpbin.org/post', data=json_data, headers=header)

除了对dict进行编码后传递,还可以json参数直接进行传递,它会自动帮我进行编码:

params = {'k1': 'v1', 'k2': ['v2', 'v3', 'v4']}
header = {'k1': 'v1', 'k2': 'v2'}
json_data = json.dumps(params)
# 使用json参数传递参数,传递之前会先进行序列化
r = requests.post('http://httpbin.org/post', json=params, headers=header)

设置超时时间:

timeout 仅对连接过程有效,与响应体的下载无关。 timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在timeout 秒内没有从基础套接字上接收到任何字节的数据时)

 

posted @ 2017-07-07 16:07  还是原来那个我  阅读(112)  评论(0编辑  收藏  举报