Python中requests库的使用

1、get请求传参

url_params = {'key':'value'}       #    字典传递参数,如果值为None的键不会被添加到url中

# get请求,字典可以直接赋值给params传参
r = requests.get('your url',params = url_params)
print(r.url)
#生成的url格式your url?key=value

2、post请求

1、如果请求的格式是'content-type': 'application/json',此时参数是字典格式要转化为json字符串,requests请求正文中data本身可以接收的数据包含,字典格式,xml,字符串,元组列表(有时传参字典报错记得转化下)。

import requests,json

#复杂post请求
url = 'http://m.ctrip.com'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload)) #如果传递的payload是dict,需要先调用dumps方法格式化一下转化为json字符串

 也可以直接把json数据赋值给json,此时无需使用json.dumps()转化

headers = json.loads(headers)
    res = r.request(url=url, method='post', params=data, headers=headers)
# post请求如果想把请求参数放到url后面,也要使用params传参
    print(res.url)  #打印出发出的完整请求,包含url+参数
    print(res.json())

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}

r = requests.post(url, json=payload)

 2、post请求的Content-Type默认格式为application/x-www-form-urlencoded

application/x-www-form-urlencoded属于比较常用的POST 提交数据的方式。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。
  如果Content-Type 设置为 application/x-www-form-urlencoded;此时body提交的数据需要按照 k1=v1&k2=v2 的方式进行编码,然后进行提交。

import requests
import json
from urllib import parse

# 定义请求header
HEADERS = {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8', 'Key': '332213fa4a9d4288b5668ddd9'}
# 定义请求地址
url = "https://api.newrank.cn/api/sync/weibo/trend"
# 通过字典方式定义请求body
FormData = {"from": '2018-07-18 16:00:00', "to": '2018-07-18 18:00:00', "page": 1, "size": 1}
# 字典转换k1=v1 & k2=v2 模式
data = parse.urlencode(FormData)
# 请求方式
content = requests.post(url=url, headers=HEADERS, data=data).text
content = json.loads(content)
print(content)

响应结果中的"categoryName":"\u624B\u52A8\u6321" 转换为中文显示
res = r.request(url=url, method=method, params=data, headers=headers)
print(res.content.decode("unicode_escape"))
print(res.text.encode().decode("unicode_escape"))
print(res.json())

定制请求头和cookie信息,然后传参

#定制头和cookie信息

import requests
import json
 
data = {'some': 'data'}
headers = {'content-type': 'application/json',
           'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
 
r = requests.post('https://api.github.com/some/endpoint', data=data, headers=headers)
print(r.text)

获取响应

# Cookies
url = 'http://example.com/some/cookie/setting/url'
r = requests.get(url)
r.cookies['example_cookie_name']    #读取cookies
import requests
url = 'http://mirrors.sohu.com/'
res=requests.get(url)

print(res)
#获取返回对象的内容,格式为字符串
print(res.text,type(res.text))

# 获取返回对象的状态码
print(res.status_code)

#获取返回的响应头内容
print(res.headers, type(res.headers))

# 指定响应体的编码格式
res.encoding='utf-8'
#print(res.text)

#获取字节串格式的数据
print(res.content)
#对字节串格式的数据解码
#print(res.content.decode("utf-8"))

#获取响应内容的Content-Type属性值
print(res.headers['Content-Type'])

import requests,json
response = requests.post("http://httpbin.org/post", data={1:1,2:2})

#把返回的json字符串数据转换为对象
obj = json.loads(response.content.decode('utf8'))
print(obj)

"""
requests库为我们提供了更方便的方法,可以使用 Response对象的 json方法,等同json.loads()
"""

#response = requests.post("http://httpbin.org/post", data={1:1,2:2})
obj = response.json()
print(obj)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值