Closed Max-Learning closed 4 years ago
看提示应该是解析到的IP不可访问 Connection aborted
@Notsfsssf 有见过类似的情况吗?
直接上IP就行了,这是目前唯一的解决办法
看提示应该是解析到的IP不可访问
Connection aborted
- 从域名推测P站加了 cloudflare.net 防水墙,对于没验证的流量估计绕不过;
- 如果还有以前的IP(比如解析app的host),可以尝试ip固定访问P站来绕开
直接上IP就行了,这是目前唯一的解决办法
有效,使用app-api.pixiv.net
的ip地址,即加上api.hosts='https://210.140.131.208'
后可以正常连接。
然而这个ip地址不是一直对应的(例如2018年的地址是210.129.120.44
),因此这个方法并不是稳定的,可能需要定时修改。
看提示应该是解析到的IP不可访问
Connection aborted
- 从域名推测P站加了 cloudflare.net 防水墙,对于没验证的流量估计绕不过;
- 如果还有以前的IP(比如解析app的host),可以尝试ip固定访问P站来绕开
直接上IP就行了,这是目前唯一的解决办法
有效,使用
app-api.pixiv.net
的ip地址,即加上api.hosts='https://210.140.131.208'
后可以正常连接。 然而这个ip地址不是一直对应的(例如2018年的地址是210.129.120.44
),因此这个方法并不是稳定的,可能需要定时修改。
那问题应该就是,如何通过DNS over HTTPS解析到app-api.pixiv.net
真实IP了。看之前用的是cloudflare的,因此可能返回不正确。感觉可以尝试换成其他服务商的:
https://github.com/upbit/pixivpy/blob/master/pixivpy3/bapi.py#L22
看目前返回的IP确实都指向它自己服务器了。。。https://cloudflare-dns.com/dns-query?name=app-api.pixiv.net&type=A&ct=application/dns-json
@Notsfsssf 有见过类似的情况吗?
我完全使用硬编码了,既然使用Dns over Https获得真实ip的方式依然不稳定,不如直接放弃这个特性,只是跟进的时候需要勤快一些
觉得你之前提供的这个bypass方法思路蛮好的,直接Set HOST对普通用户要求有点高(很少人知道如何获取真实host) 我再找找比较稳定的提供方(至少目前Google,CloudFlare都得放弃了)
觉得你之前提供的这个bypass方法思路蛮好的,直接Set HOST对普通用户要求有点高(很少人知道如何获取真实host) 我再找找比较稳定的提供方(至少目前Google,CloudFlare都得放弃了)
https://dns.quad9.net:5053/dns-query?name=app-api.pixiv.net
这个思路可能不奏效,应该是P站这个域名,整个都指向了:app-api.pixiv.net.cdn.cloudflare.net. 用quad9解析也是这个
一个变通的解决方法,使用未指向cloudflare的host解析实际IP:
api = ByPassSniApi() # Same as AppPixivAPI, but bypass the GFW
api.require_appapi_hosts(hostname="public-api.secure.pixiv.net")
原理:
cloudflare还是比较贵的,一些二级域名一般不会用这个保护。我们可以通过解析二级域名得到P站的真实IP
方法:
hostname
参数了一个变通的解决方法,使用未指向cloudflare的host解析实际IP:
api = ByPassSniApi() # Same as AppPixivAPI, but bypass the GFW api.require_appapi_hosts(hostname="public-api.secure.pixiv.net")
原理:
cloudflare还是比较贵的,一些二级域名一般不会用这个保护。我们可以通过解析二级域名得到P站的真实IP
方法:
- 查询P站的子域名:https://securitytrails.com/list/apex_domain/pixiv.net
- 使用quad9验证解析是否指向cloudflare: https://dns.quad9.net:5053/dns-query?name=public-api.secure.pixiv.net
- 看到真实IP后就可以把这个域名,传递给
hostname
参数了
确实能奏效👌,只是需要过两家服务提供商
短时间 hostname="public-api.secure.pixiv.net"
应该都是可以用的(这个是以前PAPI的子域名,估计他们都快忘了),也不需要重新找子域名
我更新下example
绕过去的这个方法太赞了!!!!!!
尝试使用
example_bypass_sni.py
中的代码登陆时在login
函数处报错:pixivpy3.utils.PixivError: requests POST https://app-api.pixiv.net.cdn.cloudflare.net./auth/token error: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了 一个现有的连接。', None, 10054, None))
。 尝试使用测试账号和自己的账号登陆,都出现了同样的错误。 这个错误出现在两天前,此前它表现良好。 我使用的是中国的教育网,请问这是否是问题所在?另外,
api.hosts
的值是app-api.pixiv.net.cdn.cloudflare.net.
,尝试用curl -p
访问这个网址时返回了1001的错误码。 尝试使用dns-query的其他返回值(ip地址)替换api.hosts,返回了错误pixivpy3.utils.PixivError: requests POST https://104.18.30.199/auth/token error: HTTPSConnectionPool(host='104.18.30.199', port=443): Max retries exceeded with url: /auth/token (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1045)')))
。