You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过requests.post发送消息?FunPay站点POST请求发消息失败

FunPay站点POST请求发送消息失败问题

我尝试通过POST请求在FunPay站点发送消息,但始终无法成功。我已经处于正确的页面,但消息就是发不出去。以下是我的代码实现:

print(f'{login}', lastChat['userSms'])
Jurl = 'https://funpay.com/chat/?node=userId' 
seska = session.get(Jurl )
soup = BeautifulSoup(seska.text, 'lxml')
tag1 = soup.find('div', id='live-counters').get('data-orders')
tag3 = soup.find('div', class_='chat chat-float').get('data-bookmarks-tag')
tag2 = soup.find("div", class_='chat chat-float').get('data-tag')
tag4 = soup.find('div', class_='param-item chat-panel hidden').get('data-tag')
session.get(Jurl)
dataMes = soup.findAll('div', class_='message')
print(dataMes[-1])
objects = '[{\"type\":\"orders_counters\",\"id\":\"5214431\",\"tag\":\"' + tag1 + '\",\"data\":false},' \
          '{\"type\":\"chat_node\",\"id\":\"users-5054677-5214431\",\"tag\":\"' + tag2 + '\",' \
          '\"data\":{\"node\":\"users-5054677-5214431\",\"last_message\":\"' + lastMes + '\",\"content\":\"s\"}},' \
          '{\"type\":\"chat_bookmarks\",\"id\":\"5214431\",\"tag\":\"' + tag3 + '\",\"data\":false},' \
          '{\"type\":\"c-p-u\",\"id\":\"5054677\",\"tag\":\"' + tag4 + '\",\"data\":false}]'
request = '{\"action\":\"chat_message\",' \
          '\"data\":{\"node\":\"users-5054677-5214431\",' \
          '\"last_message\":\"' + lastMes + '\",\"content\":\"s\"}}'
datas = {
    "objects": objects,
    "request": request,
    "csrf_token": csrf
}
print(datas)
session.post(Jurl, data=datas)

问题排查与修复建议

  • 请求端点错误:当前代码向页面URL发送POST请求,但FunPay的消息发送通常通过专门的AJAX接口(如/ajax/chat.php),而非页面本身。需用浏览器开发者工具抓包确认真实请求地址。
  • JSON拼接错误:手动拼接JSON字符串极易出现语法问题(引号嵌套、变量未加引号等),改用json.dumps()生成规范JSON格式,避免格式错误。
  • 硬编码ID问题:代码中users-5054677-5214431这类ID为硬编码,应从页面动态提取(比如聊天节点的data-node属性),而非固定写死。
  • 冗余请求:重复调用session.get(Jurl)无意义,且第二次请求未更新soup,属于无效操作。
  • 缺失请求头:模拟AJAX请求需添加必要请求头,比如X-Requested-With: XMLHttpRequest和Content-Type: application/x-www-form-urlencoded,让服务器识别为合法AJAX请求。
  • 未处理响应:发送POST后未打印响应内容,无法得知服务器返回的错误信息,应添加代码打印响应状态码和文本用于排查。

修改后的示例代码

import json
from bs4 import BeautifulSoup

print(f'{login}', lastChat['userSms'])
# 替换为实际聊天页面URL,node参数填写真实用户ID
chat_url = 'https://funpay.com/chat/?node=123456' 
response = session.get(chat_url)
soup = BeautifulSoup(response.text, 'lxml')

# 动态提取页面标签参数
live_counters_tag = soup.find('div', id='live-counters').get('data-orders')
bookmarks_tag = soup.find('div', class_='chat chat-float').get('data-bookmarks-tag')
chat_tag = soup.find('div', class_='chat chat-float').get('data-tag')
cpu_tag = soup.find('div', class_='param-item chat-panel hidden').get('data-tag')

# 获取最后一条消息ID,处理空列表情况
messages = soup.find_all('div', class_='message')
last_message_id = messages[-1].get('data-id') if messages else '0'
print(messages[-1])

# 动态生成node参数,替换为实际用户ID
target_user_id = 123456
current_user_id = 5054677
node = f'users-{current_user_id}-{target_user_id}'

# 用json.dumps生成正确JSON字符串
objects = [
    {"type": "orders_counters", "id": "5214431", "tag": live_counters_tag, "data": False},
    {"type": "chat_node", "id": node, "tag": chat_tag,
     "data": {"node": node, "last_message": last_message_id, "content": "你好"}},
    {"type": "chat_bookmarks", "id": "5214431", "tag": bookmarks_tag, "data": False},
    {"type": "c-p-u", "id": f"{current_user_id}", "tag": cpu_tag, "data": False}
]

request_payload = {
    "action": "chat_message",
    "data": {"node": node, "last_message": last_message_id, "content": "你好"}
}

post_data = {
    "objects": json.dumps(objects),
    "request": json.dumps(request_payload),
    "csrf_token": csrf
}

print(post_data)

# 添加AJAX请求头
headers = {
    'X-Requested-With': 'XMLHttpRequest',
    'Content-Type': 'application/x-www-form-urlencoded'
}

# 发送POST到真实API端点(需抓包确认)
api_response = session.post('https://funpay.com/ajax/chat.php', data=post_data, headers=headers)
# 打印响应信息排查问题
print(api_response.status_code)
print(api_response.text)

内容的提问来源于stack exchange,提问作者Влад Даниленко

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:15:39