GET请求与POST请求

GET请求

GET一般用于获取/查询资源信息

GET 请求的参数会附加在 URL 后面,因此它们会在浏览器的历史记录、网络日志等地方留下痕迹。因此,GET 请求不适合用于传输敏感数据,如密码或身份验证令牌。

import requests

# 门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某款浏览器说明该请求是个正常的请求。
# 但是如果检测到请求的载体身份标识不是基于某款浏览器的。则表示该请求为不正常的请求(爬虫)。则服务器端就很有可能拒绝该请求
# 让爬虫对应的请求载体身份标识伪装成某一款浏览器。所以我们需要自定义user-agent头部信息,来绕过UA检测,我们把它放入一个字典中

headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Mobile Safari/537.36'
}
# User-Agent 头告诉服务器关于发起请求的客户端的信息,如浏览器类型、操作系统、浏览器版本等。这有助于服务器返回与客户端兼容的响应内容。
# Cookie 头用于在客户端和服务器之间传递会话信息。这对于保持用户登录状态、购物车内容等会话信息至关重要。
url = 'https://www.baidu.com/s'
content = input('请输入您想查询的词:')

# url=f'https://www.baidu.com/s?wd={content}&pn=0'     #格式化输出拼接

# 当发送请求时,requests库会将这个参数编码成查询字符串,并附加到URL的末尾
param = {
    'wd': content,
    'pn': 0
}
response = requests.get(url=url, params=param, headers=headers)  # 三个参数


print('response url:',response.url)
print(response.headers.get('Set-Cookie'))

ctx = response.text
print(ctx)
with open('1.html', 'w', encoding='utf-8') as df:
    df.write(ctx)
print('保存成功')

POST请求

通常用于向服务器提交数据,如提交表单数据、上传文件等。POST 请求的数据不会附加在 URL 后面,而是作为请求体的一部分发送。

import requests
import base64

with open('./test.png','rb') as f :
    h=f.read()
    base64_string = base64.b64encode(h).decode('utf-8')
    print('png',h)

url = 'http://httpbin.org/post'  # 上传文件接口
files = {
    'file': ('test.png',  # 文件名称
             open('./test.png', 'rb'),  # 文件路径
             'image/png',  # 文件类型
             {'Expires': '0'}  # 其他参数,非必传
             )
}  # => 打开上传文件并且加入文件相关参数
data = {
    "name": "test" }
 # data传入请求参数dict,files传入待上传文件参数dict r = requests.post(url, data=data, files=files)
r = requests.post(url, data=data, files=files)
print(r.json())
# 登录网站的基本步骤如下:
#
# 发送GET请求获取登录页面内容:使用requests模块的get方法发送一个GET请求,获取登录页面的HTML内容。
# 解析HTML内容,获取登录所需的参数:使用Python的HTML解析库(如Beautiful Soup)来解析HTML内容,获取登录表单的参数。
# 构造POST请求,提交登录数据:构造一个POST请求,以提交登录所需的数据,并将登录所需的参数作为请求的参数传递给服务器。
# 发送POST请求完成登录:使用requests模块的post方法发送一个POST请求,在请求中携带登录所需的参数,完成登录。
# 验证登录是否成功:发送登录请求后,可以通过判断返回的页面内容或Cookie中的登录状态来验证登录是否成功。

import requests
from bs4 import BeautifulSoup

# 构造登录所需的数据
your_name=input('输入登录名')
pass_word=input('输入密码')

login_data = {
    'login': your_name,
    'password': pass_word
}

# 发送GET请求,获取登录页面的HTML内容
login_page = requests.get('https://github.com/login')
soup = BeautifulSoup(login_page.content, 'html.parser')

# 解析HTML内容,获取登录所需的参数
authenticity_token = soup.select_one('input[name="authenticity_token"]')['value']

# 将登录所需的参数添加到登录数据中
login_data['authenticity_token'] = authenticity_token

# 发送POST请求,完成登录
response = requests.post('https://github.com/session', data=login_data)

# 验证登录是否成功
if response.status_code == 200:
    print('登录成功!')
else:
    print('登录失败!')

GET 和 POST 是 HTTP 协议中常用的两种请求方法,主要有以下几点区别: 1. 参数位置不同 GET 请求的参数是在 URL 中以查询字符串的形式出现的,例如:http://www.example.com/page?param1=value1&param2=value2。 POST 请求的参数是在请求体中以键值对的形式出现的,例如:param1=value1&param2=value2。 2. 数据大小限制不同 GET 请求由于参数是在 URL 中传递的,所以受到 URL 长度的限制,不同的浏览器和服务器对 URL 长度的限制也不同,一般不建议在 GET 请求中传递大量的数据。 POST 请求由于参数是在请求体中传递的,所以不受 URL 长度的限制,但是服务器和客户端对请求体大小也有限制,一般情况下 POST 请求可以传递更大的数据。 3. 安全性不同 GET 请求中参数是以明文形式出现在 URL 中的,如果传递的参数包含敏感信息,那么这些信息可能会被拦截或者泄露,因此 GET 请求不适合传递敏感信息。 POST 请求中参数是在请求体中传递的,相对于 GET 请求POST 请求更加安全,因为请求体中的参数不会被直接显示在 URL 中。 4. 缓存处理不同 GET 请求默认会被浏览器缓存,如果请求相同的 URL,浏览器会直接从缓存中获取数据,不会重新请求服务器,这样可以减少网络流量,提高网站性能。 POST 请求不能被浏览器缓存,每次请求都会重新向服务器请求数据。 总的来说,GET 请求适合传递少量的非敏感信息,POST 请求适合传递大量的数据或者敏感信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一壶浊酒..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值