picgo-plugin-coding icon indicating copy to clipboard operation
picgo-plugin-coding copied to clipboard

不能用了

Open louiejordan opened this issue 4 years ago • 25 comments

coding官方接口调整了,作者更新一下吧

louiejordan avatar Dec 01 '20 06:12 louiejordan

稍等,我去核对下api

zytomorrow avatar Dec 01 '20 07:12 zytomorrow

2020-12-02 09:17:29 [PicGo INFO] Before transform 
2020-12-02 09:17:29 [PicGo INFO] Transforming... 
2020-12-02 09:17:29 [PicGo INFO] Before upload 
2020-12-02 09:17:29 [PicGo INFO] beforeUploadPlugins: renameFn running 
2020-12-02 09:17:29 [PicGo INFO] Uploading... 
2020-12-02 09:17:29 [PicGo INFO] {"msg":{"oauth_user_scope_error":"当前的 scope 不支持访问此 API"},"data":{},"code":3015} 
2020-12-02 09:17:29 [PicGo SUCCESS] 
undefined 

lltx avatar Dec 02 '20 01:12 lltx

我还以为我设置有问题,原来真的不能用了,每次上传后进度条走完没有提示成功,辛苦作者调整下

lovewhoilove avatar Dec 04 '20 10:12 lovewhoilove

coding官方接口调整了,作者更新一下吧

请问需要怎么调整 API 调用方式呢

memset0 avatar Dec 09 '20 06:12 memset0

目前提供的鉴权方式不支持该接口。现在在抽时间看下直接走登录拿cookie试试

zytomorrow avatar Dec 09 '20 06:12 zytomorrow

官方目前屏蔽了使用token上传文件的接口,现在有两个方案可以实现继续使用图床.

  1. 使用无头浏览器获取cooklie,然后再去请求接口--这个方式相对来说开销较大
  2. 作为备份库。使用github作为源库,然后源库配置workflow再推到coding的库,但是取coding的链接作为图床链接,这样保证了图片的打开速度。但是会消耗github资源。

方案2其实可以废弃该项目。只需要配置下github就行。 方案1不知道是否可以接受,可以接受的话,准备按这个方式修改。

zytomorrow avatar Dec 25 '20 07:12 zytomorrow

主要是传 Github 上传时间较长...

但看起来方案一时间开销也不小?

memset0 avatar Dec 28 '20 01:12 memset0

比起方案二方案一的体验感知很小的。 但是毕竟是需要使用到无头浏览器,内存和cpu的消耗肯定比之前高出很多

主要是传 Github 上传时间较长...

但看起来方案一时间开销也不小?

zytomorrow avatar Dec 28 '20 01:12 zytomorrow

主要是传 Github 上传时间较长... 但看起来方案一时间开销也不小?

比起方案二方案一的体验感知很小的。 但是毕竟是需要使用到无头浏览器,内存和cpu的消耗肯定比之前高出很多

原本一次post现在要变成一次get+一次post+调用headless browser?不过相比方案二是好很多

cpu和内存的消耗可能并不是很要紧...PicGo本身就好不到哪去(╥╯^╰╥)

memset0 avatar Dec 28 '20 05:12 memset0

走浏览器获取授权的版本发布了,大家可以尝试下。电脑上有新版的chrome或者firefox可以使用 picgo-plugin-coding-lite (这个版本我没测,尽可能还是使用标准版吧)。理论上来说,性能可以接受的。 image

zytomorrow avatar Dec 30 '20 03:12 zytomorrow

主要是传 Github 上传时间较长... 但看起来方案一时间开销也不小?

比起方案二方案一的体验感知很小的。 但是毕竟是需要使用到无头浏览器,内存和cpu的消耗肯定比之前高出很多

原本一次post现在要变成一次get+一次post+调用headless browser?不过相比方案二是好很多

cpu和内存的消耗可能并不是很要紧...PicGo本身就好不到哪去(╥╯^╰╥)

可以在picgo的安装路径下执行 npm install [email protected]指定安装最新版本(现在直接升级可能还自动获取不到这个版本) 有问题反馈我

zytomorrow avatar Dec 30 '20 03:12 zytomorrow

试了一下会报如下错误

配置文件如下

memset0 avatar Dec 31 '20 07:12 memset0

Lite 版则是

Chromium 86.0.4240.198

memset0 avatar Dec 31 '20 07:12 memset0

刚刚乱点点了个上传,没想到竟然上传成功了。

但是成功一次后又遇到了同样的问题,感觉应该是bug导致的。

memset0 avatar Dec 31 '20 08:12 memset0

Lite 版则是

Chromium 86.0.4240.198

LITE版本好像需要升级Node版本~这个我节后再处理

zytomorrow avatar Dec 31 '20 08:12 zytomorrow

刚刚乱点点了个上传,没想到竟然上传成功了。

但是成功一次后又遇到了同样的问题,感觉应该是bug导致的。

尝试使用完整版吧,完整版目前我没出现过问题。你使用完整版有问题吗

zytomorrow avatar Dec 31 '20 08:12 zytomorrow

刚刚乱点点了个上传,没想到竟然上传成功了。 但是成功一次后又遇到了同样的问题,感觉应该是bug导致的。

尝试使用完整版吧,完整版目前我没出现过问题。你使用完整版有问题吗

这个是使用完整版的时候出现的问题,Lite 一直不能用。

memset0 avatar Dec 31 '20 08:12 memset0

emmm,上传的时候把代理取消掉呢,刚没看见错误截图。你这个是页面等待超时了,默认的30s超时。 我尝试了上传8M的图片,耗时在17s左右。 有需要的话我把超时加大吧,后面版本会拦截请求,提高加载速度。 image

zytomorrow avatar Dec 31 '20 08:12 zytomorrow

感觉不是代理引起的问题。

我连续上传若干张图片,第一张能上传成功,第二张及以后的图片则不能。

感觉有点玄学,但确实好多次这样,再等待若干时间后才能上传。不知道是不是 Coding 方面的限制。

另外超时有可能不是响应时间的问题,之前曾经把配置文件填错,也是同样的报 timeout。


upd:

检查了一下,并没有开代理。

且开关代理实验了一下,都会出现这样的现象。

memset0 avatar Jan 04 '21 01:01 memset0

~~呜终于考完学考了~~,来看了下大佬的代码。

https://github.com/zytomorrow/picgo-plugin-coding/blob/dd18265c8b872875980dda00cc6e98fbe0caab9e/src/index.js#L29-L38

timeout 应该是这一段的 page.waitForNavigation() 抛出的

观察了一下前半部分如果不能正常登录(如已经登录),就不会触发页面跳转,导致抛出超时。辅助这个推测的原因还有:

  1. 如果输入的账号密码或其他配置不正确,会抛出同样的 timeout 错误;因为这种情况下浏览器不会进行页面跳转
  2. 关于上文我描述的问题,“两次可以正常上传”的时间间隔,差不多刚好是 Coding 判定登录态过期的时间间隔

个人觉得我们可以先调用 upload 接口以判断 cookie 是否过期,如果过期再调用 getCookies() 函数,这样应该能解决问题,且在连续上传图片时也节省了大量时间开销

但是我不懂 PicGo 的插件怎么在多次调用间储存 cookie 数据(初步猜测可以直接存到内存里,还没有尝试过),希望大佬指教一下,谢谢!

memset0 avatar Jan 11 '21 17:01 memset0

如果猜想正确应该加入一段

await page._client.send('Network.clearBrowserCookies');

就能正常使用(参见 #16 ),但还是会有以下问题:

  1. 效率低
  2. 多次调用登录结构会被要求输入滑动验证码

所以还是应该寻求一个比较合理的解决方案(如上文所述),我尝试在本地写了一个,但没有调试出来,加上触发了滑动验证码,就咕咕咕了

memset0 avatar Jan 11 '21 17:01 memset0

~呜终于考完学考了~,来看了下大佬的代码。

https://github.com/zytomorrow/picgo-plugin-coding/blob/dd18265c8b872875980dda00cc6e98fbe0caab9e/src/index.js#L29-L38

timeout 应该是这一段的 page.waitForNavigation() 抛出的

观察了一下前半部分如果不能正常登录(如已经登录),就不会触发页面跳转,导致抛出超时。辅助这个推测的原因还有:

  1. 如果输入的账号密码或其他配置不正确,会抛出同样的 timeout 错误;因为这种情况下浏览器不会进行页面跳转
  2. 关于上文我描述的问题,“两次可以正常上传”的时间间隔,差不多刚好是 Coding 判定登录态过期的时间间隔

个人觉得我们可以先调用 upload 接口以判断 cookie 是否过期,如果过期再调用 getCookies() 函数,这样应该能解决问题,且在连续上传图片时也节省了大量时间开销

但是我不懂 PicGo 的插件怎么在多次调用间储存 cookie 数据(初步猜测可以直接存到内存里,还没有尝试过),希望大佬指教一下,谢谢!

把cookies写入配置文件是可以的,看了下过期时间,实际上可以保持48小时使用。但是效率还是低。

逆向了下整个过程:

  1. 第一步是任意界面拿去XSRF_TOKEN和eid
  2. 手动登录触发统一登录认证,把XSRF_TOKEN和eid放入cookie进行post请求
  3. 之后XSRF_TOKEN和eid关联同时生效,就可以正常使用API了

目前存在一个问题,手动登录请求发送的密码的加密方式还未找到处理方法。统一认证的的密码是经过了MD5加密。

我尽可能看下该加密方式行不行,可行的话效率可以提升到和之前一个级别,不可行的话就得输入两次密码,一次原始密码一次编码后的密码放进配置文件

zytomorrow avatar Jan 12 '21 02:01 zytomorrow

如果猜想正确应该加入一段

await page._client.send('Network.clearBrowserCookies');

就能正常使用(参见 #16 ),但还是会有以下问题:

  1. 效率低
  2. 多次调用登录结构会被要求输入滑动验证码

所以还是应该寻求一个比较合理的解决方案(如上文所述),我尝试在本地写了一个,但没有调试出来,加上触发了滑动验证码,就咕咕咕了

先去上班干活了,不摸鱼了,再摸鱼会被打死了。 方便的话可以加我联系方式,讨论下方案。多谢

zytomorrow avatar Jan 12 '21 02:01 zytomorrow

既然知道cookie有效时间,每次上传图片的时候,去检测一下cookie有没有超过48小时不就行了?超过就删除,并且去登录,不超过就直接使用它。

xiebruce avatar Feb 16 '21 16:02 xiebruce

已修复,请安装最新版本,同时重新配置

zytomorrow avatar Mar 02 '22 09:03 zytomorrow