首页 > 编程问答 >Python:如何通过请求帖子对评论进行投票?

Python:如何通过请求帖子对评论进行投票?

时间:2024-07-20 22:50:35浏览次数:11  
标签:python post python-requests payload vote

我对评论进行投票的代码无法正常工作。它返回一个 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 检查器告诉我的响应。

Inspector web 1

Inspector web 2

Inspector web 3

Inspector web 4


代码中可能存在几处问题,导致投票请求出现 HTTP 500 错误。让我们逐一分析可能的原因,并探讨一些解决方法:

  1. CSRF 令牌验证: 虽然你在登录请求中正确处理了 CSRF 令牌,但在投票请求中似乎没有包含它。请确保你在 payload_vote 字典中也包含了 _csrf_token ,因为网站可能需要它来验证投票请求。

python payload_vote = { "_csrf_token": csrf_token, # 添加 CSRF 令牌 "comment_id": 2187750, "value": 1 }

获取投票请求的正确 CSRF 令牌。它可能与登录表单中的不同。 检查网络请求以查看浏览器发送的内容,并复制该过程。

  1. 请求头: 比较浏览器发送的请求头和你的 Python 代码中的请求头。关注可能缺少或格式错误的特定标头,例如 Content-Type Referer

  2. 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 标头 }

  3. Referer: 添加一个 Referer 标头以指示投票请求的来源。

    python headers['Referer'] = f"https://xxxxxxxxxxx/comment/{comment_id}"

  4. Cookie: 登录后,网站会设置一个 cookie 来维护你的会话。确保你的 requests.Session 对象在投票请求中也发送了此 cookie。

  5. 网站更改: 网站结构或 API 端点可能已更改。请再次检查浏览器中投票请求的网络标签,以确保你使用的是正确的 URL 和参数。

调试建议

  • 检查响应内容: 打印 response_post_vote.text 以查看服务器返回的错误消息。这可能会提供有关 500 错误原因的更多见解。
  • 使用浏览器开发者工具: 检查浏览器在进行投票请求时发送的确切请求头和数据。比较这些信息与你的 Python 代码,以找出差异。

通过仔细检查这些方面并进行必要的调整,你应该能够识别并解决投票请求中的问题。

请记住,在对网站进行抓取或自动化操作时,始终要尊重其 robots.txt 文件并遵守其服务条款。

标签:python,post,python-requests,payload,vote
From: 78773073

相关文章

  • python_day7(补1)
    数据类型​ 之前为列表类型​ 插入一个元组的介绍 之后还有字典,三者区别为括号方式()[]{}元组类型(tuple)使用:先定义一个元组数据​ vegetable_tuple='(tomato','corn','cucumber','carrot','corn','pumpkin)'与列表类型格式很像,不过只能取不能改,需要特......
  • 《深入了解 Postman 接口测试工具》
    在现代Web开发中,接口测试是确保系统稳定性和可靠性的关键环节。Postman作为一款强大的接口测试工具,为开发者和测试人员提供了便捷、高效的测试体验。本文将深入详解Postman的各项功能和使用方法。一、Postman简介Postman是一款功能丰富的API测试工具,支持多种HTTP......
  • 在 python 中写入 %appdata% 时出现奇怪的行为
    我试图将一些数据写入%appdata%。一切似乎都像Script1的输出中所示的那样工作。正在创建新目录并保存文件,并且也成功检索数据。但尝试查看文件资源管理器中的数据时,该文件夹不存在!CMD也找不到文件和目录。后来我手动创建了文件,检查了一下,发生了什么。CMD现在可以找到该文......
  • 使用 selenium 在 python 中打开 chrome 中的链接
    通过此链接https://bancadatistatisticaoas.inail.it/analytics/saw.dll?Dashboard&PortalPath=%2Fshared%2FBDS%2F_portal%2FINF_Definiti_Industria_e_Servizi我需要单击“FCostruzioni”,然后单击F41COSTRUZIONIED埃迪菲西。这是我的代码,但它不起作用。我做错了......
  • 七大排序算法的Python实现
    七大排序算法的Python实现1.冒泡排序(BubbleSort)算法思想冒泡排序通过重复交换相邻的未按顺序排列的元素来排序数组。每次迭代都将最大的元素“冒泡”到数组的末尾。复杂度分析时间复杂度:O(n^2)空间复杂度:O(1)defbubble_sort(arr):n=len(arr)for......
  • python反序列化
    之前hgame中遇到python反序列化,这次正好借分享会来尽可能详细学习一下python反序列化基础知识什么是序列化?反序列化?在很多时候为了方便对象传输,我们往往会把一些内容转化成更方便存储、传输的形式。我们把“对象->字符串”的翻译过程称为“序列化”;相应地,把“字符串->对......
  • 我在 python 项目中不断收到“无法识别图像文件中的数据”错误
    我正在尝试向我的TK窗口添加一个图标,但我不断收到一条错误消息:Traceback(mostrecentcalllast):File"C:\Users\roger\source\repos\PythonApplication\PythonApplication.py",line7,in<module>windowIcon=tk.PhotoImage(file="C:/Users/roger/Downloa......
  • 如何在 Postgres 中存储嵌套列表?
    如何以方便稍后在我的程序中使用嵌套列表的方式存储嵌套列表?Postgres我计划将列表写入数据库一次并多次重复使用。我已经能够将嵌套列表存储为Python但这不是最佳选择,我试图通过尽可能少的后处理来完成此任务,所以我宁愿做更多的前期工作以提高速度/轻松度在......
  • Python学习笔记41:游戏篇之外星人入侵(二)
    前言在上一篇文章,我们已经创建好了项目目录,在今天,我们主要编写入口模块的功能。mainmain.py模块是我们游戏程序的入口,所有我们需要在模块中编写游戏主启动以及主页面相关的代码。当前我们的main模块是这样的,这是我们创建项目时默认生成一些代码,接下来我们就要进行我们......
  • Python学习笔记39:进阶篇(二十八)pygame的使用之按键映射及按键失效问题解决
    前言基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。我们的下一步目标是完成pythoncrashcourse中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。私信我发送消息python资料,......