Python中的Requests请求方法介绍
本篇文章主要是为大家科普Python中的一些相关用法实例。首先,我们要介绍一下PythonRequests请求方法,它是Python中的一个很强大的类库,可以帮助你进行各种网络请求,比如get、post、put、delete等等。其中,get和post是最常用的两种。

PythonRequests的安装方式
PythonRequests的安装非常简单,只需在命令行中输入以下代码即可:
$ pip install requests
$ easy_install requests
常见的两种请求方法:GET和POST
1、GET请求
最常用的GET请求参数可直接跟在url后面,即在url的“?”后以“key=value&key=value”的形式传递参数。由于参数暴露在url后,一般不传递敏感信息,常用于查询等操作。由于参数是跟在url后面的,所以上传数据量小。
2、POST请求
POST请求参数可写在url后面,也可写在body体里面。body格式有四种常见类型:
- application/x-www-form-urlencoded: 默认表单上传数据格式,例如:username=admin&password123
- multipart/form-data: 复合表单可传输数据和文件
- text: 常见的文本格式,如json、xml等
- binary: 二进制格式,只能上传一个文件
请求方法的实现与使用
1、GET请求
url = "http://www.search:9001/search/"
params = {"key": "你好"}
res = requests.get(url=url, params=params)
2、POST请求(body为json格式,带有cookie)
url = "http://www.search:9001/search/"
headers = {'Content-Type': 'application/json'}
data = {"key": "你好"}
cookies = {'uid': '1'}
res = requests.post(url=url,headers=headers,data=json.dumps(data),cookies=cookies)
3、POST请求(body为urlencoded格式)
url = "http://www.search:9001/search/"
data = {"key": "你好"}
res = requests.post(url=url, data=data)
4、文件上传
def post_file_request(url, file_path):
if os.path.exists(file_path):
if url not in [None, ""]:
if url.startswith("http") or url.startswith("https"):
files={'file':open(file_path, 'rb')}
res=requests.post(url, files=files, data=data)
return {"code": 0, "res": res}
else:
return {"code": 1, "res": "url格式不正确"}
else:
return {"code": 1, "res": "url不能为空"}
else:
return {"code": 1, "res": "文件路径不存在"}
Response对象的获取和处理
Request请求发送完毕后,会返回一个Response对象,它包含许多信息。以下代码展示了对Response的封装,包括获取响应内容、状态码、Cookies、Headers以及文本编码。
class ResponseHandler(object):
@staticmethod
def get_response_text(response):
if response not in [None, ""]:
if isinstance(response, requests.models.Response):
return {"code": 0, "res": response.text.encode('utf-8').decode('unicode_escape')}
else:
return {"code": 1, "res": "response对象不合法"}
else:
return {"code": 1, "res": "response对象不能为空"}
@staticmethod
def get_response_status_code(response):
if response not in [None, ""]:
if isinstance(response, requests.models.Response):
return {"code": 0, "res": response.status_code}
else:
return {"code": 1, "res": "response对象不合法"}
else:
return {"code": 1, "res": "response对象不能为空"}
@staticmethod
def get_response_cookies(response):
if response not in [None, ""]:
if isinstance(response, requests.models.Response):
return {"code": 0, "res": response.cookies}
else:
return {"code": 1, "res": "response对象不合法"}
else:
return {"code": 1, "res": "response对象不能为空"}
@staticmethod
def get_response_headers(response):
if response not in [None, ""]:
if isinstance(response, requests.models.Response):
return {"code": 0, "res": response.headers}
else:
return {"code": 1, "res": "response对象不合法"}
else:
return {"code": 1, "res": "response对象不能为空"}
@staticmethod
def get_response_encoding(response):
if response not in [None, ""]:
if isinstance(response, requests.models.Response):
return {"code": 0, "res": response.encoding}
else:
return {"code": 1, "res": "response对象不合法"}
else:
return {"code": 1, "res": "response对象不能为空"}
遇到问题——获取和发送Cookie
有时需要在请求中发送和获取Cookie,这里以百度为例,演示获取和发送Cookie的方法。
import requests
# 获取Cookie
url = "https://www.baidu.com/"
r = requests.get(url)
cookies = requests.utils.dict_from_cookiejar(r.cookies)
print(r.cookies)
print(cookies)
for a in r.cookies:
print(a.name, a.value)
# 发送Cookie
host = "*****"
endpoint = "cookies"
url = ''.join([host, endpoint])
# 方法一:简单发送
# cookies = {"aaa": "bbb"}
# r = requests.get(url, cookies=cookies)
# print r.text
# 方法二:复杂发送
s = requests.session()
c = requests.cookies.RequestsCookieJar()
c.set('c-name', 'c-value', path='/xxx/uuu', domain='.test.com')
s.cookies.update(c)
结语
以上就是本篇文章的全部内容,希望对大家有所帮助。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7250.html
