upbit / pixivpy

Pixiv API for Python
https://pypi.org/project/PixivPy3/#files
The Unlicense
1.79k stars 149 forks source link

使用 ByPassSniApi 无法下载图像 #179

Closed yuyuko-C closed 3 years ago

yuyuko-C commented 3 years ago

在 ByPassSniApi 中使用 其他 API 均可正常使用。使用 download API 就会报错。

pixivpy3.utils.PixivError: requests GET https://i.pximg.net/c/600x1200_90/img-master/img/2016/08/09/17/46/56/58342746_p0_master1200.jpg error: HTTPSConnectionPool(host='i.pximg.net', port=443): Max retries exceeded with url: /c/600x1200_90/img-master/img/2016/08/09/17/46/56/58342746_p0_master1200.jpg (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000017DE4439760>: Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复
或连接的主机没有反应,连接尝试失败。'))

在 pixivpy_async 中 使用你的 ByPassSniApi 可正常下载。

upbit commented 3 years ago

ByPassSniApi只代理 pixiv 的接口,下载用的是CDN,也就是 pximg.net 的域名 这块可能被墙了,建议通过代理访问

yuyuko-C commented 3 years ago

ByPassSniApi只代理 pixiv 的接口,下载用的是CDN,也就是 pximg.net 的域名 这块可能被墙了,建议通过代理访问

好的,感谢. 不过我还是有些好奇为什么在 pixivpy_async中 将 PixivClient(bypass=True) 之后就可以下载.

upbit commented 3 years ago

pixivpy_async应该是对download的CDN也做了包装 pixivpy里只对API部分有,而下载图片是直连的。具体可以看 api.py 里download的实现

ymxbj commented 2 years ago

萌新想问一下,现在有什么办法能解决在ByPassSniApi中下载图片吗?我这里也是别的api都能用,api.download时就会报错ww

upbit commented 2 years ago

目前只能挂代理。ByPassSniApi只解析了P站的API,没有解析CDN地址

ymxbj commented 2 years ago

目前只能挂代理。ByPassSniApi只解析了P站的API,没有解析CDN地址

好的好的,谢谢dalao回复。不过感觉不能下载图片的话,api的作用也不是很大了(小声)

Xdynix commented 2 years ago

目前只能挂代理。ByPassSniApi只解析了P站的API,没有解析CDN地址

好的好的,谢谢dalao回复。不过感觉不能下载图片的话,api的作用也不是很大了(小声)

这年头没个代理的话Github也不太好上啊

upbit commented 2 years ago

可以介绍下BAPI绕过的原理,你可以验证下CDN地址是否可以类似方法。核心是根据域名解析到服务器IP,然后直连服务器绕开: https://github.com/upbit/pixivpy/blob/master/pixivpy3/bapi.py#L21

图片地址理论上也是类似,如果你能解析到一个无需代理能访问的地址,就可以实现绕过 下载的方式参考 api.download(),IP直连后传递域名

ymxbj commented 2 years ago

目前只能挂代理。ByPassSniApi只解析了P站的API,没有解析CDN地址

好的好的,谢谢dalao回复。不过感觉不能下载图片的话,api的作用也不是很大了(小声)

这年头没个代理的话Github也不太好上啊

哈哈我当然是有代理的,只是我想在服务器上挂一个自动下载pixiv的脚本,所以一直在探索怎么直接绕开防火墙。

ymxbj commented 2 years ago

可以介绍下BAPI绕过的原理,你可以验证下CDN地址是否可以类似方法。核心是根据域名解析到服务器IP,然后直连服务器绕开: https://github.com/upbit/pixivpy/blob/master/pixivpy3/bapi.py#L21

图片地址理论上也是类似,如果你能解析到一个无需代理能访问的地址,就可以实现绕过 下载的方式参考 api.download(),IP直连后传递域名

亲测可以!谢谢您的指点!不过目前只验证了在学校教育网上的可行性,我试了下换到一般的网络好像就不行了,还不知道具体原因。