我对评论进行投票的代码无法正常工作。它返回一个 http 500 错误。
我有一个使用用户登录的 Python 程序,它应该自动对评论进行投票。
我的代码如下:
from bs4 import BeautifulSoup
import requests
login_url = "https://xxxxxxxxxxx/auth/login"
login_url_post = "https://xxxxxxxxxxx/auth/login_check"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
'Accept-Language': 'es,es-ES;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6'
}
session = requests.Session()
response_get = session.get(login_url)
soup = BeautifulSoup(response_get.text, "html.parser")
# Find field "value" from "_csrf_token"
csrf_token = soup.find("input", {"name": "_csrf_token"})["value"]
# Payload
payload = {
"_csrf_token": csrf_token,
"_username": "email",
"_password": "password",
}
response_post = session.post(login_url_post, data=payload, headers=headers)
# Now I have logged in as a user (verified)
###### vote comment after having logged in ##################
# The Link comment is another but the url for vote is another direction
url_vote = "https://xxxxxxxxxxx/api/1.0/comment/2187750/vote"
payload_vote = {
"comment_id": 2187750,
"value": 1
}
# Requests Post for vote comment
response_post_vote = session.post(url_vote, data=payload_vote, headers=headers)
print(response_post_vote)
最后一个“打印”返回 http 500 错误。
此处显示我从 Web 浏览器投票时的数据以及它从 Web 检查器告诉我的响应。
代码中可能存在几处问题,导致投票请求出现 HTTP 500 错误。让我们逐一分析可能的原因,并探讨一些解决方法:
-
CSRF 令牌验证:
虽然你在登录请求中正确处理了 CSRF 令牌,但在投票请求中似乎没有包含它。请确保你在
payload_vote
字典中也包含了_csrf_token
,因为网站可能需要它来验证投票请求。
python
payload_vote = {
"_csrf_token": csrf_token, # 添加 CSRF 令牌
"comment_id": 2187750,
"value": 1
}
获取投票请求的正确 CSRF 令牌。它可能与登录表单中的不同。 检查网络请求以查看浏览器发送的内容,并复制该过程。
-
请求头: 比较浏览器发送的请求头和你的 Python 代码中的请求头。关注可能缺少或格式错误的特定标头,例如
Content-Type
或Referer
。 -
Content-Type: 由于你正在发送 JSON 数据,请将
Content-Type
标头设置为application/json
。python headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', 'Accept-Language': 'es,es-ES;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', 'Content-Type': 'application/json' # 添加 Content-Type 标头 }
-
Referer: 添加一个
Referer
标头以指示投票请求的来源。python headers['Referer'] = f"https://xxxxxxxxxxx/comment/{comment_id}"
-
Cookie: 登录后,网站会设置一个 cookie 来维护你的会话。确保你的
requests.Session
对象在投票请求中也发送了此 cookie。 -
网站更改: 网站结构或 API 端点可能已更改。请再次检查浏览器中投票请求的网络标签,以确保你使用的是正确的 URL 和参数。
调试建议
-
检查响应内容:
打印
response_post_vote.text
以查看服务器返回的错误消息。这可能会提供有关 500 错误原因的更多见解。 - 使用浏览器开发者工具: 检查浏览器在进行投票请求时发送的确切请求头和数据。比较这些信息与你的 Python 代码,以找出差异。
通过仔细检查这些方面并进行必要的调整,你应该能够识别并解决投票请求中的问题。
请记住,在对网站进行抓取或自动化操作时,始终要尊重其
robots.txt
文件并遵守其服务条款。