Files
magnus919_agent-skills/flaresolverr/scripts/flaresolverr
T

38 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python3
"""Small JSON CLI for the FlareSolverr v1 API."""
import argparse, json, os, sys, urllib.request
def call(server, payload, timeout):
req=urllib.request.Request(server.rstrip('/') + '/v1', data=json.dumps(payload).encode(), headers={'Content-Type':'application/json'})
try:
with urllib.request.urlopen(req, timeout=timeout) as response:
return json.load(response)
except Exception as exc:
print(json.dumps({'error': type(exc).__name__, 'message': str(exc)}), file=sys.stderr)
return 1
def main():
p=argparse.ArgumentParser(description='FlareSolverr JSON CLI')
p.add_argument('--server', default=os.getenv('FLARESOLVERR_SERVER','http://localhost:8191'))
p.add_argument('--timeout', type=float, default=60)
s=p.add_subparsers(dest='command', required=True)
s.add_parser('health')
for method in ('get','post'):
x=s.add_parser(method); x.add_argument('url'); x.add_argument('--session'); x.add_argument('--data', default='')
x=s.add_parser('session'); x.add_argument('action', choices=('create','list','destroy')); x.add_argument('session_id', nargs='?')
a=p.parse_args()
if a.command=='health': payload={'cmd':'sessions.list'}
elif a.command=='session':
payload={'cmd': 'sessions.' + a.action}
if a.action=='destroy': payload['session']='' if a.session_id is None else a.session_id
else:
payload={'cmd':'request.'+a.command, 'url':a.url, 'maxTimeout':int(a.timeout*1000)}
if a.session: payload['session']=a.session
if a.command=='post' and a.data: payload['postData']=a.data
result=call(a.server, payload, a.timeout)
if result==1: return 1
print(json.dumps(result, sort_keys=True))
return 0
if __name__=='__main__': raise SystemExit(main())