mirror of
https://github.com/FlareSolverr/FlareSolverr.git
synced 2025-06-07 03:55:24 +00:00
103 lines
4.8 KiB
Python
103 lines
4.8 KiB
Python
import unittest
|
|
|
|
from webtest import TestApp
|
|
|
|
from dtos import V1ResponseBase, STATUS_OK
|
|
import flaresolverr
|
|
import utils
|
|
|
|
|
|
def _find_obj_by_key(key: str, value: str, _list: list) -> dict | None:
|
|
for obj in _list:
|
|
if obj[key] == value:
|
|
return obj
|
|
return None
|
|
|
|
|
|
def asset_cloudflare_solution(self, res, site_url, site_text):
|
|
self.assertEqual(res.status_code, 200)
|
|
|
|
body = V1ResponseBase(res.json)
|
|
self.assertEqual(STATUS_OK, body.status)
|
|
self.assertEqual("Challenge solved!", body.message)
|
|
self.assertGreater(body.startTimestamp, 10000)
|
|
self.assertGreaterEqual(body.endTimestamp, body.startTimestamp)
|
|
self.assertEqual(utils.get_flaresolverr_version(), body.version)
|
|
|
|
solution = body.solution
|
|
self.assertIn(site_url, solution.url)
|
|
self.assertEqual(solution.status, 200)
|
|
self.assertIs(len(solution.headers), 0)
|
|
self.assertIn(site_text, solution.response)
|
|
self.assertGreater(len(solution.cookies), 0)
|
|
self.assertIn("Chrome/", solution.userAgent)
|
|
|
|
cf_cookie = _find_obj_by_key("name", "cf_clearance", solution.cookies)
|
|
self.assertIsNotNone(cf_cookie, "Cloudflare cookie not found")
|
|
self.assertGreater(len(cf_cookie["value"]), 30)
|
|
|
|
|
|
class TestFlareSolverr(unittest.TestCase):
|
|
app = TestApp(flaresolverr.app)
|
|
# wait until the server is ready
|
|
app.get('/')
|
|
|
|
def test_v1_endpoint_request_get_cloudflare(self):
|
|
sites_get = [
|
|
('nowsecure', 'https://nowsecure.nl', '<title>nowSecure</title>'),
|
|
('0magnet', 'https://0magnet.com/search?q=2022', 'Torrent Search - ØMagnet'),
|
|
('1337x', 'https://1337x.unblockit.cat/cat/Movies/time/desc/1/', ''),
|
|
('avistaz', 'https://avistaz.to/api/v1/jackett/torrents?in=1&type=0&search=',
|
|
'<title>Access denied</title>'),
|
|
('badasstorrents', 'https://badasstorrents.com/torrents/search/720p/date/desc',
|
|
'<title>Latest Torrents - BadassTorrents</title>'),
|
|
('bt4g', 'https://bt4g.org/search/2022', '<title>Download 2022 Torrents - BT4G</title>'),
|
|
('cinemaz', 'https://cinemaz.to/api/v1/jackett/torrents?in=1&type=0&search=',
|
|
'<title>Access denied</title>'),
|
|
('epublibre', 'https://epublibre.unblockit.cat/catalogo/index/0/nuevo/todos/sin/todos/--/ajax',
|
|
'<title>epublibre - catálogo</title>'),
|
|
('ext', 'https://ext.to/latest/?order=age&sort=desc',
|
|
'<title>Download Latest Torrents - EXT Torrents</title>'),
|
|
('extratorrent', 'https://extratorrent.st/search/?srt=added&order=desc&search=720p&new=1&x=0&y=0',
|
|
'Page 1 - ExtraTorrent'),
|
|
('idope', 'https://idope.se/browse.html', '<title>Recent Torrents</title>'),
|
|
('limetorrents', 'https://limetorrents.unblockninja.com/latest100',
|
|
'<title>Latest 100 torrents - LimeTorrents</title>'),
|
|
('privatehd', 'https://privatehd.to/api/v1/jackett/torrents?in=1&type=0&search=',
|
|
'<title>Access denied</title>'),
|
|
('torrentcore', 'https://torrentcore.xyz/index', '<title>Torrent[CORE] - Torrent community.</title>'),
|
|
('torrentqq223', 'https://torrentqq223.com/torrent/newest.html', 'https://torrentqq223.com/ads/'),
|
|
('36dm', 'https://www.36dm.club/1.html', 'https://www.36dm.club/yesterday-1.html'),
|
|
('erai-raws', 'https://www.erai-raws.info/feed/?type=magnet', '403 Forbidden'),
|
|
('teamos', 'https://www.teamos.xyz/torrents/?filename=&freeleech=',
|
|
'<title>Log in | Team OS : Your Only Destination To Custom OS !!</title>'),
|
|
('yts', 'https://yts.unblockninja.com/api/v2/list_movies.json?query_term=&limit=50&sort=date_added',
|
|
'{"movie_count":')
|
|
]
|
|
for site_name, site_url, site_text in sites_get:
|
|
with self.subTest(msg=site_name):
|
|
res = self.app.post_json('/v1', {
|
|
"cmd": "request.get",
|
|
"url": site_url
|
|
})
|
|
asset_cloudflare_solution(self, res, site_url, site_text)
|
|
|
|
def test_v1_endpoint_request_post_cloudflare(self):
|
|
sites_post = [
|
|
('nnmclub', 'https://nnmclub.to/forum/tracker.php', '<title>Трекер :: NNM-Club</title>',
|
|
'prev_sd=0&prev_a=0&prev_my=0&prev_n=0&prev_shc=0&prev_shf=1&prev_sha=1&prev_shs=0&prev_shr=0&prev_sht=0&f%5B%5D=-1&o=1&s=2&tm=-1&shf=1&sha=1&ta=-1&sns=-1&sds=-1&nm=&pn=&submit=%CF%EE%E8%F1%EA')
|
|
]
|
|
|
|
for site_name, site_url, site_text, post_data in sites_post:
|
|
with self.subTest(msg=site_name):
|
|
res = self.app.post_json('/v1', {
|
|
"cmd": "request.post",
|
|
"url": site_url,
|
|
"postData": post_data
|
|
})
|
|
asset_cloudflare_solution(self, res, site_url, site_text)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|