pixivpy-async icon indicating copy to clipboard operation
pixivpy-async copied to clipboard

有计划向pixivpy一样提供一个bypass类似的类么?

Open PainterPuppets opened this issue 4 years ago • 7 comments

大陆地区访问比较难,有点麻烦(

PainterPuppets avatar Jan 17 '20 02:01 PainterPuppets

嗯..其实我感觉像bypass那样通过IP来连接的方法不太牢靠(说不定什么时候IP就被墙了呢),推荐通过现有的api_proxy功能来解决。(其实是因为懒qwq

对于Proxy,可以使用下面这种方法简单的创建一个:

创建一个CloudFlare Worker(假设为api.c.worker.dev),然后把下面的代码扔进去:

addEventListener("fetch", e => {
        let t = e.request, d = new URL(t.url);
        d.hostname = (t.url.includes("auth/token") ? "oauth.secure" : "app-api") + ".pixiv.net";
        e.respondWith(fetch(d, {body: t.body, headers: t.headers, method: t.method}))
});

然后指定一下proxy即可:

aapi.set_api_proxy(app_hosts="api.c.worker.dev", auth_hosts="api.c.worker.dev")
await aapi.login(username, password)

Mikubill avatar Jan 17 '20 07:01 Mikubill

哈哈,被你说中了。好像有些地方1.0.0.1被墙了

upbit avatar Jan 17 '20 07:01 upbit

@Mikubill 感谢

PainterPuppets avatar Jan 17 '20 08:01 PainterPuppets

嗯..其实我感觉像bypass那样通过IP来连接的方法不太牢靠(说不定什么时候IP就被墙了呢),推荐通过现有的api_proxy功能来解决。(其实是因为懒qwq

对于Proxy,可以使用下面这种方法简单的创建一个:

创建一个CloudFlare Worker(假设为api.c.worker.dev),然后把下面的代码扔进去:

addEventListener("fetch", e => {
        let t = e.request, d = new URL(t.url);
        d.hostname = (t.url.includes("auth/token") ? "oauth.secure" : "app-api") + ".pixiv.net";
        e.respondWith(fetch(d, {body: t.body, headers: t.headers, method: t.method}))
});

然后指定一下proxy即可:

aapi.set_api_proxy(app_hosts="api.c.worker.dev", auth_hosts="api.c.worker.dev")
await aapi.login(username, password)

今天使用时报错,返回403

raise ContentTypeError(
aiohttp.client_exceptions.ContentTypeError: 0, message='Attempt to decode JSON with unexpected mimetype: text/html; charset=utf-8', url=URL('我的cloudflare')

然后超过尝试次数。以前按照上面设置是有效使用的,请问是我的ip地址被ban了嘛还是需要修改cloudflare

Chika99 avatar Jul 25 '21 15:07 Chika99

最近搞了个批量解析的方法,主要还是通过 DNS over HTTP(s) 来解析。如果1.1.1.1被墙还能用其他能访问的: https://github.com/upbit/pixivpy/blob/master/pixivpy3/bapi.py#L26

CloudFlare Worker 门槛有点高,或者另一个思路是搞一批公用的池子(不知道有没有人用过)

upbit avatar Jul 26 '21 01:07 upbit

@upbit 我试一下,谢谢大佬

Chika99 avatar Jul 26 '21 15:07 Chika99

嗯..其实我感觉像bypass那样通过IP来连接的方法不太牢靠(说不定什么时候IP就被墙了呢),推荐通过现有的api_proxy功能来解决。(其实是因为懒qwq

对于Proxy,可以使用下面这种方法简单的创建一个:

创建一个CloudFlare Worker(假设为api.c.worker.dev),然后把下面的代码扔进去:

addEventListener("fetch", e => {
        let t = e.request, d = new URL(t.url);
        d.hostname = (t.url.includes("auth/token") ? "oauth.secure" : "app-api") + ".pixiv.net";
        e.respondWith(fetch(d, {body: t.body, headers: t.headers, method: t.method}))
});

然后指定一下proxy即可:

aapi.set_api_proxy(app_hosts="api.c.worker.dev", auth_hosts="api.c.worker.dev")
await aapi.login(username, password)

目前此方法已失效,请问需要如何调整。

yuyuko-C avatar Aug 24 '21 11:08 yuyuko-C