Skip to content
This repository was archived by the owner on Feb 22, 2025. It is now read-only.

Commit e83d2fd

Browse files
author
rix
committed
Remove Sponsors Helper support for captcha solving
This commit eliminates all references to the Sponsors Helper functionality, including related functions, configurations, and UI elements. The focus now shifts to using FlareSolverr as the sole solution for Cloudflare bypass handling. The cleanup streamlines code maintenance and reduces unnecessary complexity.
1 parent d4df35a commit e83d2fd

File tree

6 files changed

+9
-112
lines changed

6 files changed

+9
-112
lines changed

feedcrawler/providers/config.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ class CrawlerConfig(object):
2727
("port", "int", "9090"),
2828
("prefix", "str", ""),
2929
("interval", "int", "60"),
30-
("sponsors_helper", "str", ""),
3130
("flaresolverr", "str", ""),
3231
("english", "bool", "False"),
3332
("surround", "bool", ""),

feedcrawler/providers/http_requests/cache_handler.py

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
from feedcrawler.providers.common_functions import site_blocked, site_blocked_with_advanced_methods
1212
from feedcrawler.providers.http_requests.cloudflare_handlers import flaresolverr_task
1313
from feedcrawler.providers.http_requests.cloudflare_handlers import get_solver_url
14-
from feedcrawler.providers.http_requests.cloudflare_handlers import sponsors_helper_task
1514
from feedcrawler.providers.http_requests.request_handler import request
1615
from feedcrawler.providers.sqlite_database import FeedDb
1716

@@ -53,7 +52,6 @@ def cached_request(url, method='get', params=None, headers=None, redirect_url=Fa
5352
if dont_cache:
5453
shared_state.logger.debug("Aufruf ohne HTTP-Cache: " + url)
5554

56-
sponsors_helper_url = get_solver_url("sponsors_helper")
5755
flaresolverr_url = get_solver_url("flaresolverr")
5856

5957
if not headers:
@@ -76,29 +74,16 @@ def cached_request(url, method='get', params=None, headers=None, redirect_url=Fa
7674
proxies = {}
7775
force_ipv4 = False
7876

79-
flaresolverr_run = False
80-
allow_sponsors_helper_run = False
81-
if sponsors_helper_url and not flaresolverr_url:
82-
allow_sponsors_helper_run = True
83-
8477
while True:
8578
try:
8679
if site_blocked(url):
8780
if site_blocked_with_advanced_methods(url):
8881
print(f"Der Aufruf von {url} wurde blockiert!")
8982
return {'status_code': status_code, 'text': text, 'headers': response_headers, 'url': url}
90-
if allow_sponsors_helper_run: # will only be used when flaresolverr is not available or not working
91-
cookiejar, user_agent, proxy = sponsors_helper_task(sponsors_helper_url, url)
92-
proxies = {"http": proxy, "https": proxy}
93-
headers['User-Agent'] = user_agent
94-
force_ipv4 = False
95-
flaresolverr_run = False
96-
elif flaresolverr_url:
83+
if flaresolverr_url:
9784
cookiejar, user_agent = flaresolverr_task(flaresolverr_url, url)
9885
headers['User-Agent'] = user_agent
9986
force_ipv4 = True
100-
flaresolverr_run = True
101-
allow_sponsors_helper_run = True
10287

10388
if method == 'post':
10489
response = request(url, method="POST", data=params, timeout=60, headers=headers,
@@ -115,16 +100,13 @@ def cached_request(url, method='get', params=None, headers=None, redirect_url=Fa
115100
normal_blocked = db_status.retrieve(site + "_normal")
116101
if not normal_blocked:
117102
db_status.store(site + "_normal", "Blocked")
118-
if sponsors_helper_url or flaresolverr_url:
103+
if flaresolverr_url:
119104
print("Versuche es mit Cloudfare-Umgehung erneut...")
120105
continue # try again with any solver
121106
else:
122107
advanced_blocked = db_status.retrieve(site + "_advanced")
123108
if not advanced_blocked:
124109
db_status.store(site + "_advanced", "Blocked")
125-
if flaresolverr_run and allow_sponsors_helper_run:
126-
print("Lösung mit FlareSolverr gescheitert. Versuche es mit Sponsors Helper...")
127-
continue # try again with sponsors helper
128110
return {'status_code': status_code, 'text': text, 'headers': response_headers, 'url': url}
129111

130112
if redirect_url:

feedcrawler/providers/http_requests/cloudflare_handlers.py

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -142,67 +142,6 @@ def test_challenge_path(url):
142142
return "/"
143143

144144

145-
def sponsors_helper_task(solver_url, url):
146-
base_domain = url.split("/")[2]
147-
last_solution = unpickle_db("sponsors_helper", base_domain)
148-
if last_solution:
149-
try:
150-
if last_solution["valid_until"] > int(time.time()):
151-
cookiejar = cookie_dict_to_cookiejar(last_solution["cookies"])
152-
user_agent = last_solution["user_agent"]
153-
proxy = get_local_proxy_url(solver_url, last_solution["proxy"])
154-
if cookiejar:
155-
shared_state.logger.debug("Bestehende Cloudflare-Cookies werden für " + url + " verwendet.")
156-
return cookiejar, user_agent, proxy
157-
else:
158-
clean_db("sponsors_helper", base_domain)
159-
except:
160-
pass
161-
162-
if test_solver_url("sponsors_helper", solver_url + "/status"):
163-
shared_state.logger.debug(f"Versuche Cloudflare auf der Seite {url} mit Sponsors Helper zu umgehen...")
164-
165-
solver_endpoint = "/cloudflare_cookie/"
166-
solver_payload = {
167-
'url': "https://" + base_domain + test_challenge_path(url)
168-
}
169-
170-
response = request(
171-
solver_url + solver_endpoint,
172-
method="POST",
173-
json=solver_payload,
174-
timeout=180)
175-
176-
if response.status_code == 200:
177-
try:
178-
response = loads(response.text)
179-
cookies = response["cookies"]
180-
if cookies:
181-
cookiejar = cookie_dict_to_cookiejar(cookies)
182-
user_agent = response["user_agent"]
183-
proxy = get_local_proxy_url(solver_url, response["proxy"])
184-
valid_until = int(time.time()) + 1800 - 60
185-
186-
pickle_db("sponsors_helper",
187-
base_domain,
188-
{
189-
"cookies": cookies,
190-
"user_agent": user_agent,
191-
"proxy": proxy,
192-
"valid_until": valid_until
193-
})
194-
195-
shared_state.logger.debug(
196-
"Die Erzeugung von Cloudflare-Cookies für " + url + " war mit Sponsors Helper erfolgreich.")
197-
return cookiejar, user_agent, proxy
198-
except:
199-
pass
200-
else:
201-
shared_state.logger.debug(
202-
"Die Erzeugung von Cloudflare-Cookies für " + url + " ist mit Sponsors Helper fehlgeschlagen.")
203-
return False, False
204-
205-
206145
def flaresolverr_task(solver_url, url):
207146
base_domain = url.split("/")[2]
208147
last_solution = unpickle_db("flaresolverr", base_domain)

feedcrawler/run.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -133,14 +133,14 @@ def main():
133133
else:
134134
delay = 60
135135

136-
try:
137-
while not shared_state.values["connected"]:
138-
print(f"Verbindung zu JDownloader noch nicht hergestellt - verzögere Suchlauf um {delay} Sekunden")
139-
time.sleep(60)
140-
except KeyboardInterrupt:
141-
sys.exit(1)
142-
143136
if not os.environ.get('GITHUB_ACTION_PR'):
137+
try:
138+
while not shared_state.values["connected"]:
139+
print(f"Verbindung zu JDownloader noch nicht hergestellt - verzögere Suchlauf um {delay} Sekunden")
140+
time.sleep(60)
141+
except KeyboardInterrupt:
142+
sys.exit(1)
143+
144144
process_feed_crawler = multiprocessing.Process(target=feed_crawler,
145145
args=(shared_state_dict, shared_state_lock,))
146146
process_feed_crawler.start()

feedcrawler/web_interface/serve/api.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,6 @@ def get_settings():
301301
"port": port,
302302
"prefix": general_conf.get("prefix"),
303303
"interval": to_int(general_conf.get("interval")),
304-
"sponsors_helper": general_conf.get("sponsors_helper"),
305304
"flaresolverr": general_conf.get("flaresolverr"),
306305
"english": general_conf.get("english"),
307306
"surround": general_conf.get("surround"),
@@ -441,7 +440,6 @@ def post_settings():
441440
if to_int(interval) < 5:
442441
interval = '5'
443442
section.save("interval", interval)
444-
section.save("sponsors_helper", to_str(data['general']['sponsors_helper']))
445443
section.save("flaresolverr", to_str(data['general']['flaresolverr']))
446444
section.save("english", to_str(data['general']['english']))
447445
section.save("surround", to_str(data['general']['surround']))

feedcrawler/web_interface/vuejs_frontend/src/components/Settings.vue

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -349,27 +349,6 @@ function updatePlexUrl() {
349349
<div id="collapseSolvers" aria-labelledby="headingSolvers" class="accordion-collapse collapse"
350350
data-bs-parent="#accordionSettings">
351351
<div class="accordion-body">
352-
<FormKit v-model="store.settings.general.sponsors_helper"
353-
help="Hier die URL des durch FeedCrawler erreichbaren Sponsors Helpers (Port 9700) angeben. Der Sponsors Helper wird für jede Seite genutzt, auf der eine Blockade durch Cloudflare erkannt wurde."
354-
help-class="text-muted"
355-
input-class="form-control bg-light mb-2"
356-
label="Sponsors-Helper-URL"
357-
messages-class="text-danger"
358-
outer-class="mb-4"
359-
placeholder="Bspw. http://192.168.0.1:9700"
360-
type="url"
361-
validation="url"
362-
validation-visibility="live"/>
363-
<div class="mb-4">
364-
<mark>
365-
Die zuverlässigste Möglichkeit, Cloudflare-Blockaden zu umgehen, ist dafür zu bezahlen.<br>
366-
Über den Sponsors Helper ist es möglich, vor dem Suchlauf erkannte Cloudflare-Blockaden zu
367-
umgehen.
368-
Dabei wird pro blockierter Seite ein kurzfristig gültiger Cloudflare-Cookie erzeugt, der dann für
369-
den Suchlauf verwendet wird. Die Kosten pro Seite und Suchlauf liegen im Sub-Cent-Bereich.<br>
370-
Um Kosten zu sparen, kann parallel ein FlareSolverr betrieben werden.
371-
</mark>
372-
</div>
373352
<FormKit v-model="store.settings.general.flaresolverr"
374353
help="Hier die URL eines durch FeedCrawler erreichbaren FlareSolverrs angeben. FlareSolverr wird für jede Seite genutzt, auf der eine Blockade durch Cloudflare erkannt wurde."
375354
help-class="text-muted"

0 commit comments

Comments
 (0)