zc
This commit is contained in:
113
MCP/gemini_proxy_test.py
Normal file
113
MCP/gemini_proxy_test.py
Normal file
@@ -0,0 +1,113 @@
|
||||
import json
|
||||
import requests
|
||||
|
||||
# ================= 配置区域 =================
|
||||
|
||||
# 1. 认证令牌 (Authorization Token)
|
||||
# 从 widgetStreamAssist 请求的 "Request Headers" -> "Authorization" 复制
|
||||
AUTH_TOKEN = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IldBQS5BY2c4ZXVIa0xsOXFiN1BobzBtRS04YzJpV0FqSlY1dHFuZGdhTE9LNmpyeGRadmFvVG9tZjN2aG1vRlBjVVFtN1N5T1NwYm1GVUNKZU5qRkdqNG50c3dxeXphVGNEZHR1UEpwY3EzQUpidV9LV0I1N1Zmb1phWWQ2ay1VMHNUX3lPNWs4T1hIUHZaSGRpWm9xSmlIVWNNM2ZpbFNnYU9UWVJWT2dBNGFSeExMckNCTHRPNjV4WERaTGVzeFJKNmpFM3FISTBNQjYxeG1hTG5WYTNOUEhGYkI4WnhXcHA3M212SXdnQVhYU1k2RlU1SnQ1LWdKSUlxTXV4WVZ5dXlxVTNodV9iREF3enBvaVBaSU1nVi02ZE5LdWc3SlJfMWNJUTdhZE91YnlpdVA0Q0hqLV9za0haUzgweGd2aXA4S3Z1Ui1lRnppRWlPXzRmMGxoYjlrQk5tYzQ0RkxRQ2ZXVC1YTi1JTG1uNC1LcjgxMFNreDc0a3dVMUZjRWw2dkZJYnI1VmlrRnpIdlNJUkNxakFyX0x3TzFUN3ZMbDd5LXNiSHlJWWN4OUdNd3dhSnZIYy11YlhnUkl4cm1vdG1IUTlYLXd6UEpRTnpxQlVrOHRHSVdiNGxaQ2ZsZjh4Rk5IQ3R3YVFNdVNtZGZzc1ByT0NUN2d2YyJ9.eyJpc3MiOiJodHRwczovL2J1c2luZXNzLmdlbWluaS5nb29nbGUiLCJhdWQiOiJodHRwczovL2Jpei1kaXNjb3ZlcnllbmdpbmUuZ29vZ2xlYXBpcy5jb20iLCJzdWIiOiJjc2VzaWR4LzMyNjAzOTY4OCIsImlhdCI6MTc2NTE2NjUwMSwiZXhwIjoxNzY1MTY2ODAxLCJuYmYiOjE3NjUxNjY1MDF9.g_pzR-3_OaL8eXHh_5alAuJeMKL56O5rS1JcX63Twmw"
|
||||
|
||||
# 2. 接口地址
|
||||
TARGET_URL = "https://biz-discoveryengine.googleapis.com/v1alpha/locations/global/widgetStreamAssist"
|
||||
|
||||
# 3. 会话 ID 和 Config ID (从真实 Payload 复制)
|
||||
SESSION_ID = "collections/default_collection/engines/agentspace-engine/sessions/16611680310063068731"
|
||||
CONFIG_ID = "36cc1840-8078-4a90-ad0a-6f995a52af32"
|
||||
|
||||
# ===============================================================
|
||||
|
||||
def parse_gemini_response(text):
|
||||
"""
|
||||
根据您提供的真实响应体,更新解析器。
|
||||
"""
|
||||
print("------ 原始响应 ------")
|
||||
print(text)
|
||||
print("--------------------")
|
||||
try:
|
||||
full_response = ""
|
||||
# 响应体可能是一系列由换行符分隔的JSON对象
|
||||
# 我们需要找到包含有效文本块的部分
|
||||
# 注意:真实的流式响应可能更复杂,这里是一个简化版解析
|
||||
lines = text.strip().split('\n')
|
||||
for line in lines:
|
||||
try:
|
||||
data = json.loads(line)
|
||||
# 根据您提供的响应体,路径是 streamAssistResponse -> answer -> replies -> [0] -> groundedContent -> content -> text
|
||||
text_chunk = data["streamAssistResponse"]["answer"]["replies"][0]["groundedContent"]["content"]["text"]
|
||||
full_response += text_chunk
|
||||
except (KeyError, IndexError, TypeError, json.JSONDecodeError):
|
||||
continue
|
||||
if full_response:
|
||||
return full_response
|
||||
return "未能从响应流中提取有效文本。"
|
||||
except Exception as e:
|
||||
return f"解析响应失败: {e}"
|
||||
|
||||
def send_test_request(prompt: str):
|
||||
"""
|
||||
发送一次测试请求并返回结果。
|
||||
"""
|
||||
if "在此处粘贴" in AUTH_TOKEN:
|
||||
return "错误: 请在脚本中填入真实的 AUTH_TOKEN"
|
||||
|
||||
# 使用您提供的真实Payload结构,并动态插入prompt
|
||||
# 关键修正:在prompt前添加 '\n' 以完全模拟浏览器行为
|
||||
payload = {
|
||||
"configId": CONFIG_ID,
|
||||
"additionalParams": {"token": "-"},
|
||||
"streamAssistRequest": {
|
||||
"session": SESSION_ID,
|
||||
"query": {"parts": [{"text": "\n" + prompt}]}, # <--- 关键修正
|
||||
"filter": "",
|
||||
"fileIds": [],
|
||||
"answerGenerationMode": "NORMAL",
|
||||
"toolsSpec": {
|
||||
"webGroundingSpec": {},
|
||||
"toolRegistry": "default_tool_registry",
|
||||
"imageGenerationSpec": {},
|
||||
"videoGenerationSpec": {}
|
||||
},
|
||||
"languageCode": "zh-CN",
|
||||
"userMetadata": {"timeZone": "Asia/Shanghai"},
|
||||
"assistSkippingMode": "REQUEST_ASSIST",
|
||||
"assistGenerationConfig": {"modelId": "gemini-3-pro-preview"}
|
||||
}
|
||||
}
|
||||
|
||||
# 使用您提供的完整请求头
|
||||
headers = {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
|
||||
"authorization": AUTH_TOKEN,
|
||||
"content-type": "application/json",
|
||||
"origin": "https://business.gemini.google",
|
||||
"priority": "u=1, i",
|
||||
"referer": "https://business.gemini.google/",
|
||||
"sec-ch-ua": '"Microsoft Edge";v="143", "Chromium";v="143", "Not A(Brand";v="24"',
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-ch-ua-platform": '"Windows"',
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0",
|
||||
"x-server-timeout": "1800",
|
||||
}
|
||||
|
||||
try:
|
||||
print(f"正在发送测试请求: {prompt[:100]}...")
|
||||
resp = requests.post(TARGET_URL, headers=headers, json=payload)
|
||||
|
||||
if resp.status_code != 200:
|
||||
return f"请求失败! 状态码: {resp.status_code}\n响应内容:\n{resp.text}"
|
||||
|
||||
return parse_gemini_response(resp.text)
|
||||
|
||||
except Exception as e:
|
||||
return f"发生异常: {e}"
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_prompt = "你好世界"
|
||||
result = send_test_request(test_prompt)
|
||||
print("\n====== 测试结果 ======")
|
||||
print(result)
|
||||
print("======================")
|
||||
Reference in New Issue
Block a user