requests

URL参数请求:

import requests

'''
URL Parameters 请求方式:URL参数
例如: 以get 方式请求http://httpbin.org/get?first_name=hello&last_name=word

'''
# params={"first_name":"hello","last_name":"word"}
# responds=requests.get("http://httpbin.org/get",params=params)
# print(responds.text)
# print(responds.url)

表单参数请求:

'''
表单参数提交,注意只更新的是表单数据
Content-Type: application/x-www-form-urlencoded
例如: 以post 方式请求http://httpbin.org/post, 增加的资源为params={"first_name":"hello","last_name":"word"}

'''
params={"first_name":"hello","last_name":"word"}
headers={"Content-Tpye":"application/x-www-form-urlencoded"}
responds=requests.post("http://httpbin.org/post",data=params,headers=headers)
print(responds.text)
print(responds.url)
print(responds.request)

Json 参数数据请求

'''
Json数据提交,更新的是数据data
Content-Type: application/json
例如: 以post 方式请求http://httpbin.org/post, 增加的资源为params={"first_name":"hello","last_name":"word"} 
'''
#Python学习交流QQ群:778463939
params={"first_name":"hello","last_name":"word"}
headers={"Content-Tpye":"application/json"}
responds=requests.post("http://httpbin.org/post",json=params,headers=headers)
print(responds.text)
print(responds.url)
print(responds.request)

额外话题--构建URL

def build_url(URL,endpoint):
    return "/".join([URL,endpoint])
print(build_url("http://httpbin.org","post"))

 二、requests模块的基础知识

1,requests支持的请求方式

requests.get("http://httpbin.org/get")
requests.post("http://httpbin.org/post")
requests.put("http://httpbin.org/put")
requests.delete("http://httpbin.org/delete")
requests.head("http://httpbin.org/get")
requests.options("http://httpbin.org/get")我们最常用的就是get和post请求,两者的区别就是get请求没有请求体,而post请求有请求体

2,get请求

import requests#这是请求的路径,必须有
url='https://dig.chouti.com/'  #这是本次访问携带的参数,发送请求时,它会以?name=hh的形式加在路径后面,不是必须要有 
params={'name':'hh'}    #这是请求的请求体,它是以键值对的形式存在的,也不是必须要有
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'}
#这是访问携带的cookie数据cookies='dshdjdsadhsaghgdasjjdasjdhasdashdjkhskad'res = requests.get(url=url, headers=headers,params=params,cookies=cookies)

3,post请求

post请求和get请求是一样的,只是多了一个请求体数据#data和json都是请求体数据,data是字典类型的,json发送的是json字符串
data={'name':'hh','pwd':'12345'}      
json={"name":"hh","pwd":"12345"}#请求体是以data形式发的,默认的contentType类型是urlencoded,如果请求体数据是以json形式发的,默认的contentType类型为json
res1=requests.post(url='http://httpbin.org/post', data={'name':'yuan'})
res2=requests.post(url='http://httpbin.org/post',json={'age':"22",})对于post请求来说,除了比get请求多一个请求体以外,其他用法一模一样,get请求拥有的参数,post都拥有,比如说params参数,如果在post请求里面加一个params参数,他会和get请求一样,会以?a=1的形式加在请求路径后面

4,response响应对象

4.1 常见属性

import requests
respone=requests.get('https://sh.lianjia.com/ershoufang/')
respone.text     #响应文本,本身是字节类型,但会以一种猜测的编码格式帮你解码成字符串
respone.content  #响应文本,字节类型的文本
respone.status_code  #响应的状态码
respone.headers      #响应头数据
respone.cookies      #响应的cookie
respone.cookies.get_dict()    #响应的字典形式的cookie
respone.cookies.items()       #响应的元祖形式的cookie
respone.url                   
respone.history               #如果请求过程中发生了重定向,这会帮你记录过程
respone.encoding              #指定text的是用哪种方式解码

4.2 编码问题

刚才上面讲了,res.text会以一种猜测的编码帮你解码,但有时是不正确的编码,所以导致拿到数据编码会有问题,其实我们可以给text指定用哪种编码解码
import requests
res=requests.get('http://www.baidu.com')
coding=res.apparent_encoding      #这才是拿到别人的编码方式
res.encoding=coding               #把别人的编码方式赋给text的解码方式
res.text                         #这样解码后的字符串就不会有问题了

4.3 对于图片、视频等字节类型文件

首先我们直接用res.content就行了,其次是由于文件太大,我们不应该一下就全写进文件里,而是应该一段一段的写进去,于是我们就可以for循环res.iter_content(),然后再一次一次的写入
import requests
response=requests.get('http://bangimg1.dahe.cn/forum/201612/10/200447p36yk96im76vatyk.jpg')
with open("res.png","wb") as f:
    # f.write(response.content) # 比如下载视频时,如果视频100G,用response.content然后一下子写到文件中是不合理的
    for line in response.iter_content():     
        f.write(line)

4.4针对接收json数据

import requests
import json
response=requests.get('http://httpbin.org/get')
#我们是可以用反序列化自己手动处理json数据,其实这样麻烦了
res1=json.loads(response.text) 
#别人已经给我们封装好了一个方法res.json()这样就直接帮你完成了反序列化的过程
res2=response.json() 

4.5关于重定向

在requests的一些列请求方式中,除了head方式,其他的都会自动处理重定向,上面的属性讲了,可以通过res.history可以查看发送了那些重定向
我们还可以通过allow_redirects参数设置不让他重定向
r = requests.get('http://github.com', allow_redirects=False)

 https://docs.python-requests.org/zh_CN/latest/

故乡明
原文地址:https://www.cnblogs.com/luweiweicode/p/14350883.html