jianjianai / ms-copilot-play

Cloudflare Worker 的 Microsoft Copilot 加速服务。Microsoft Copilot 是基于 OpenAI GPT-4 的强大 AI 并且能够使用 Bing 搜索来解答问题。简单部署即可在国内高速访问原滋原味的 Microsoft Copilot 的几乎全部功能,聊天,笔记本,插件,图像生成,分享等等..
https://copilot.6m6c.cn/?dpwa=1
MIT License
245 stars 320 forks source link

请教是怎么过验证的? #9

Closed SokWith closed 4 months ago

SokWith commented 5 months ago

@jianjianai 按照大佬的代码,改了两个pages部署,一个 proxy copilot: https://mcop.pages.dev 仓库:https://github.com/SokWith/mscopilot-proxy ,一个proxy bing: https://msbing.pages.dev 仓库: https://github.com/SokWith/msbingproxy ;

问题1:copilot无论匿名还是登录,均不跳验证直接使用,原理是什么? 而 bing 匿名会跳验证并且通不过: image

问题2: bing 登录后账户无锁时可以使用,但切换到 search后回来就直接跳 sydney.bing.com的聊天服务器,造成会话失败,需要如何更新 rewritebody ? ps:仿照 https://github.com/Harry-zklcdc/go-proxy-bingai/issues/429#issuecomment-2154429880 采用服务器端rewritebody 是可以 search和copilot间随意跳转的 https://msbi.pages.dev

SokWith commented 5 months ago

PS:目前Pages部署不费域名,这个项目太耗cf的访问调用次数了,可以使用任意多的小号部署Pages。

jianjianai commented 5 months ago

回复1

具体通过验证的原理我也不清楚,这个验证就是个玄学,我小号可以过,大号不知道为什么反正就是过不了。开魔法上网去官网上过了之后就没弹过了。后续打算改用Harry-zklcdc/go-bingai-pass这个项目来通过验证。

回复2

这个问题可能是重新切换回来的时候又和服务器发了一些请求,并且没有替换掉sydney.bing.com,这个可以从网络请求里找到具体的接口,替换一下就能解决。

SokWith commented 5 months ago

回复2

这个问题可能是重新切换回来的时候又和服务器发了一些请求,并且没有替换掉sydney.bing.com,这个可以从网络请求里找到具体的接口,替换一下就能解决。

你这个代码,从返回来的前端源代码看,核心js文件都是 r.bing.com/rp/*.js,内容都没有更改过,这一点与Harry-zklcdc/go-bingai-pass 的不同,他的是返回来的都是内容已经替换了的核心CIB.js,那么,rewritebody的更改是由前端注入的代码操作的吗? 我已经添加了对/search请求注入代码了,只实现了create请求的改写,sydney请求失效。但对 /chat请求的注入则是有效的。这两个请求的不同点是,/chat请求是在bing首页的copilot元素点击进入的,而/search转聊天是在 search页面的copilot元素点击进入的

jianjianai commented 5 months ago

你这个代码,从返回来的前端源代码看,核心js文件都是 r.bing.com/rp/*.js,内容都没有更改过,这一点与Harry-zklcdc/go-bingai-pass 的不同,他的是返回来的都是内容已经替换了的核心CIB.js,那么,rewritebody的更改是由前端注入的代码操作的吗? 我已经添加了对/search请求注入代码了,只实现了create请求的改写,sydney请求失效。但对 /chat请求的注入则是有效的。这两个请求的不同点是,/chat请求是在bing首页的copilot元素点击进入的,而/search转聊天是在 search页面的copilot元素点击进入的

sydney 请求是 websocket 请求,所以要在前端替换 window.WebSocket 对象才能进行拦截,前端并没有这个操作,而是在后端替换url实现的。

SokWith commented 5 months ago

sydney 请求是 websocket 请求,所以要在前端替换 window.WebSocket 对象才能进行拦截,前端并没有这个操作,而是在后端替换url实现的。

我的意思是,无论是/chat还是/search的请求,这个代码返回的核心CIB文件都是官方原版,没有被改写过。从这个官方原版的CIB.js释放启动的wss会话,为什么/chat请求下能够实现sydney的域名改写并正确调用而/search下则没有进行域名改写造成直接调用官方sydney.bing.com服务器从而出错了。即:核心的起动器CIBjs是同一个,为什么请求的源路径不同会发起不同目标路径的调用?/chat是如何做到调用wss时改写sydney域名的

不好意思,重新看了一下,/chat请求时是改写了CIB的,而/search请求时是没有改写,问题出在/search页面下点击copilot后的调用没有实现注入rewritebody

SokWith commented 5 months ago

原来是两个页面的URL地址写法不一致:

/chat:
"rms-answers-CodexBundle-cib-bundle":"https://r.bing.com/rp/2RflyAwwfqjnfw_zP8BVDuk59HE.br.js"

/search:
{'A:rms:answers:CodexBundle:cib-bundle':'https:\/\/r.bing.com\/rp\/2RflyAwwfqjnfw_zP8BVDuk59HE.br.js'},