requests模块的基本使用

requests的基本使用

"""

# 1、request模块的基本使用

import requests

### 发送HTTP请求

# get,post等请求其实本质就是调用request函数
ret = requests.get('https://www.cnblogs.com')
print(ret.status_code)  # 响应状态码
print(ret.text)  # 响应体,转成了字符串
print(ret.content)  # 响应体,二进制

ret1 = requests.post()


# 2、get请求带参数的写法
# 方式一
ret = requests.get('http://127.0.0.1:8000/?name=alen',
                   headers={
                    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
                   })


# 放式二(推荐使用,因为中文会自动转码)
ret = requests.get('http://127.0.0.1:8000/',params={'name': 'alen', 'age':18})
print(ret.text)



# 3、带headers
ret = requests.get('http://127.0.0.1:8000/?name=alen',
                   headers={
                    # 标识:什么浏览器发送的信息,请求头相关的东西都在META中获取
                    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
                    # 上一个页面的地址,作用图片防盗链
                    'Referer': 'xxx'
                   })

print(ret)
# 图片防盗链:如果图片的referer不是自己的网站就直接禁止掉


# 4、带cookie,随机字符串(用户信息,也代表session),这里不管后台用的token还是session认证,这里统一都叫cookie

# 第一种方式
ret = requests.get('http://127.0.0.1:8000/?name=alen',
                   headers={
                    'cookie': 'key=value;key2=value',
                   })


# 第二种方式
ret = requests.get('http://127.0.0.1:8000/?name=alen',
                   cookies={"alen": "trust yourself"})


print(ret)



# 5、发送post请求(注册,登录)携带数据(body)

# 注意:如果你用的是data默认请求体中用的是urlencoded编码
ret = requests.post('http://127.0.0.1:8000/', data={'name':'alen','age':18})


import json
data = json.dumps({'name':'alen', 'age': 18})
# 注意:json是json编码,要想获取只能在body这中拿
ret = requests.post('http://127.0.0.1:8000/', json=data)
print(ret)

# 注意:编码格式是请求头中带的,所以我们可以手动修改,在headers中修改


# 6、session对象
session = requests.session()
# 跟requests.get/post用起来完全一样,但是它帮我们处理了cookie

# 假设是一个登陆,并且成功
session.post()
# 再向该网站发送请求,就是登陆状态,不需要手动携带cookie
session.get('地址')


# 7 响应对象
print(respone.text)   # 响应体转成str
print(respone.content) # 响应体二进制(图片,视频)

print(respone.status_code) # 响应状态码
print(respone.headers) # 响应头
print(respone.cookies) # 服务端返回的cookie
print(respone.cookies.get_dict()) # 转成字典
print(respone.cookies.items())

print(respone.url)  # 当次请求的地址
print(respone.history) # 如果有重定向,会放到一个列表中
ret=requests.post('http://127.0.0.1:8000/')
ret=requests.get('http://127.0.0.1:8000/admin')
#不要误解
ret=requests.get('http://127.0.0.1:8000/user')
print(ret.history)

print(respone.encoding) # 编码方式

#response.iter_content() # 视频,图片迭代取值
with open("a.mp4",'wb') as f:
    for line in response.iter_content():
        f.write(line)


# 8 乱码问题
# 加载回来的页面,打印出来,乱码(我们用的是utf8编码),如果网站用gbk,
ret.encoding='gbk'
ret=requests.get('http://127.0.0.1:8000/')
# ret.apparent_encoding  #当前页面的编码
ret.encoding=ret.apparent_encoding


# 9、解析json
# 返回数据有可能是json格式,也有可能是HTML格式
ret = requests.get('http://127.0.0.1:8000/')

print(type(ret.text))  #<class 'str'>
print(ret.text)  # {"name": "alen", "age": 18}

a = ret.json()  # 帮我们转成json格式,也就是我们传过来的json字典
print(a)  # {'name': 'alen', 'age': 18}
print(type(a))  # <class 'dict'>


# 10 使用代理
# 正向代理
# django如何拿到客户端ip地址 META.get("REMOTE_ADDR")
# 如何去获取代理,如何使用(用自己项目验收)
# 使用代理有什么用
# ret=requests.get('http://127.0.0.1:8000/', proxies={'http':'地址'})
ret=requests.get('http://127.0.0.1:8000/')
print(type(ret.text))
print(ret.text)


# 11 异常处理
# 用try except捕获一下 就用它就型了:Exception

# 12 上传文件(爬虫用的比较少,后台写服务,)
file={'myfile':open("1.txt", 'rb')}
ret=requests.post('http://127.0.0.1:8000/', files=file)
print(ret.content)
"""
posted @ 2020-04-08 22:12  alen_zhan  阅读(284)  评论(0编辑  收藏  举报
返回顶部