1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

python中Requests请求的安装方法与常见用法详解

Python中的Requests请求方法介绍

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

python中Requests请求的安装方法与常见用法详解

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