Closed single-ptilopsis closed 2 years ago
你好,码错了
import requests
resp = requests.get('http://localhost:29010/botProfile')
# ,headers={'sessionKey': session})
headers那段你都没用上
我测试都没问题,应该是你header传错了
我以下几种写法都没有问题,请检查下自己的代码
import requests
if __name__ == '__main__':
headers = {"sessionKey": "8mdOWNCg"}
res = requests.get("http://localhost:8080/botProfile", headers=headers)
print(res.text)
import requests
if __name__ == '__main__':
headers = {"Authorization": "session 8mdOWNCg"}
res = requests.get("http://localhost:8080/botProfile", headers=headers)
print(res.text)
import requests
if __name__ == '__main__':
headers = {"Authorization": "sessionKey 8mdOWNCg"}
res = requests.get("http://localhost:8080/botProfile", headers=headers)
print(res.text)
提交Issue时语法码错了,实际运行时是正常传参的 以下是我测试时使用的完整代码
import requests
import json
host = 'localhost'
port = 8080
verify_key = 'TestKey'
qq = 174***
url = f'http://{host}:{port}/'
res = requests.post(f'{url}verify', json={'verifyKey': verify_key})
print(res.text)
session = json.loads(res.text)['session']
res = requests.post(f'{url}bind', json={'qq': qq, 'sessionKey': session})
print(res.text)
headers = {'sessionKey':session}
try:
res = requests.get(f'{url}botProfile',headers=headers)
print(res.text)
finally:
res = requests.post(f'{url}release', json={'qq': qq, 'sessionKey': session})
print(res.text)
这是config\net.mamoe.mirai-api-http\setting.yml的配置
adapters:
- ws
- http
debug: false
enableVerify: true
verifyKey: TestKey
singleMode: false
cacheSize: 4096
adapterSettings:
ws:
host: localhost
port: 8080
reservedSyncId: -1
http:
host: localhost
port: 8080
我通过socket模块搭建本地服务和云服务器检测header传递,得到的结果为传递正常,且sessionKey大小写准确,本地服务收集到的header结果如下
b'GET / HTTP/1.1\r\nHost: localhost:2344\r\nUser-Agent: python-requests/2.26.0\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\nsessionKey: QW0Ohs4E\r\n\r\n'
在本地的另一台设备(WindowsServer2019)上我从github下载mirai-console(v2.10.0)和mirai-api-http(v2.4.0)并进行安装,配置文件同上,运行上述测试代码时结果为(此设备从未安装过mirai,python版本3.9.10,requests版本2.15.1)
{"code":0,"session":"SYlnDR26"}
{"code":0,"msg":"success"}
{"code":3,"msg":"Session失效或不存在"}
{"code":0,"msg":"success"
我尝试切换到以前的mirai-api-http版本(直到v2.0.0)结果依旧没发生变化 java版本为默认的11.0.14.1
java -version
openjdk version "11.0.14.1" 2022-02-08
OpenJDK Runtime Environment Temurin-11.0.14.1+1 (build 11.0.14.1+1)
OpenJDK 64-Bit Server VM Temurin-11.0.14.1+1 (build 11.0.14.1+1, mixed mode)
中间是不是经过什么http代理、反向代理导致请求头被丢弃了
笔记本(最开始测试的设备)和本地的WinSrv2019均装过v2ray以稳定访问github 但在关闭v2ray(关闭开机自启的情况下开机)后测试的结果并未改善,且启用v2ray的情况下成功检测请求头传递 为了排除本地环境因素,我在三台云服务器上也安装了python,mirai-console和mirai-http-api,以下是检测的结果 ( 1 ) WinSrv2019 2c2t4g 此设备之前安装过v2ray,但在使用完毕后就删除了所有文件 (操作时间4月前),mirai-console(v2.8.?)和mirai-http-api(v2.3.3)也是在此时安装 此后进行过一次更新,mirai-console更新为v2.9.0-M1 运行结果
{"code":0,"session":"AvSy7Gv3"}
{"code":0,"msg":"success"}
{"code":3,"msg":"Session失效或不存在"}
{"code":0,"msg":"success"}
( 2 ) WinSrv2016 1c1t2g 此设备未安装过v2ray,也未安装过miria相关配件,安装为直连,java使用默认版本(11)进行安装 mirai-console(v2.10.0) mirai-http-api(v2.4.0) 运行结果
{"code":0,"session":"B7p7kmMG"}
{"code":0,"msg":"success"}
{"code":3,"msg":"Session失效或不存在"}
{"code":0,"msg":"success"}
( 3 ) WinSrv2019 2c2t4g 此设备为重装系统后安装mirai和python解释器,python(v3.10.2),mirai-console(v2.10.0),mirai-http-api(v2.4.0),安装为直连,java使用默认版本(11)进行安装 运行结果
{"code":0,"session":"YgPdSgj5"}
{"code":0,"msg":"success"}
{"code":3,"msg":"Session失效或不存在"}
{"code":0,"msg":"success"}
在此设备上进行的操作已用录屏的方式记录,抹去了一些包含隐私的信息,全长~10min,如有需要我可以提供此视频到合适的地址
抱歉,我用你的代码也完全复现不了
试试使用默认设置?(删掉settings.yml)
找到问题所在了,是配置文件的问题
adapters:
- http
- ws
这是能正常使用header传递的adapters项配置 然而,当颠倒了http与ws的顺序后
adapters:
- ws
- http
header传递就会失效,但其他一切正常 adapterSettings中http与ws的配置顺序颠倒并不会影响header传递
这真是个有趣的现象,晚上再测试一下
请求头丢失了,准备构造最小demo判断是否ktor的bug
返回 {'code': 3, 'msg': 'Session失效或不存在'} mirai-console版本2.10.0,mirai-http-api版本为2.4.0,运行平台windows11 将session传递置于url参数后调用正常,确认http适配器配置无误,session有效且请求无误 切换请求api(friendProfile)后结果依旧,将header格式换为Authorization: session YourSessionKey和Authorization: sessionKey YourSessionKey进行尝试结果仍为{'code': 3, 'msg': 'Session失效或不存在'}