Added SOCKS5 with auth handling

This commit is contained in:
ThePhaseless
2025-04-12 21:46:42 +00:00
parent 05f9f44c79
commit 81959df037
3 changed files with 30 additions and 12 deletions
+6 -6
View File
@@ -3,7 +3,7 @@
An alternative to [FlareSolverr](https://github.com/FlareSolverr/FlareSolverr) as a drop-in replacement, built with [seleniumbase](https://seleniumbase.io/) and [FastAPI](https://fastapi.tiangolo.com).
> [!IMPORTANT]
> Due to recent challenge changes, this software does not guarantee that the Cloudflare challenge will be bypassed. Cloudflare likely requires valid network traffic originating from the users public IP address to mark a connection as legitimate. While this tool may bypass the initial browser check, it does not ensure that requests will consistently pass Cloudflare's validation. More testing and data are required to understand how Cloudflare identifies connections and requests as valid. Invalid requests will result in Byparr's looping and eventually time-outing.
> This software does **not** guarantee that any challenge will be bypassed. While this tool passes the initial browser check, Cloudflare and other captcha providers likely require valid network traffic originating from the users public IP address to mark a connection as legitimate. If any website does not pass the challenge, please run troubleshooting steps and check if other websites work before you create an GitHub issue.
> [!IMPORTANT]
> Support for NAS devices (like Synology) is minimal. Please report issues, but do not expect it to be fixed quickly. The only ARM device I have is a free Ampere Oracle VM, so I can only test ARM support on that. See [#22](https://github.com/ThePhaseless/Byparr/issues/22) and [#3](https://github.com/ThePhaseless/Byparr/issues/3)
@@ -33,11 +33,11 @@ An alternative to [FlareSolverr](https://github.com/FlareSolverr/FlareSolverr) a
## Options
| Env | Default | Description |
| -------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `USE_XVFB` | `SeleniumBase default` | Use virtual desktop with Xvfb. (Linux only) (Can cause performance hog [#14](https://github.com/ThePhaseless/Byparr/issues/14)) |
| `USE_HEADLESS` | `SeleniumBase default` | Use headless chromium. |
| `PROXY` | None | Proxy to use. (format: `username:password@host:port`) |
| Environment Variable | Default | Description |
| -------------------- | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `USE_XVFB` | `SeleniumBase default` | Use virtual desktop with Xvfb. (Linux only) (Can cause performance hog [#14](https://github.com/ThePhaseless/Byparr/issues/14)) |
| `USE_HEADLESS` | `SeleniumBase default` | Use headless chromium. |
| `PROXY` | None | Proxy to use in format: `protocol://username:password@host:port`. [SOCKS5 with authentication is not supported by Chrome](https://stackoverflow.com/questions/75602916/connection-to-private-proxy-socks5-with-chrome-webrequest-onauthrequired-and), see `compose.yaml` file for a workaround |
## Tags
+13 -2
View File
@@ -1,12 +1,23 @@
services:
byparr:
image: ghcr.io/thephaseless/byparr
restart: unless-stopped
build:
context: .
dockerfile: Dockerfile
environment:
- LOG_LEVEL=INFO
# environment: # Uncomment if using pproxy
# - proxy=http://pproxy:8080
volumes:
- ./screenshots:/app/screenshots # For screenshots when exception occurs
ports:
- "8191:8191"
# # Uncomment the following lines to enable pproxy
# pproxy:
# tty: true # Required for pproxy to work
# container_name: pproxy
# restart: unless-stopped
# image: mosajjal/pproxy:latest
# command:
# - -vv
# - -l http://:8080
# - -r socks5://host:port#username:password
+11 -4
View File
@@ -1,7 +1,8 @@
import logging
from time import gmtime, strftime
from fastapi import Header
from fastapi import Header, HTTPException
from httpx import codes
from sbase import SB, BaseCase
from src.consts import LOG_LEVEL, PROXY, USE_HEADLESS
@@ -14,18 +15,24 @@ if len(logger.handlers) == 0:
def get_sb(
proxy: str | None = Header(
default=None,
default=PROXY,
examples=["protocol://username:password@host:port"],
description="Override default proxy from env",
description="Override default proxy address",
),
):
"""Get SeleniumBase instance."""
if proxy and proxy.startswith("socks5://") and "@" in proxy:
raise HTTPException(
status_code=codes.BAD_REQUEST,
detail="SOCKS5 proxy with authentication is not supported. Check README for more info.",
)
with SB(
uc=True,
headless=USE_HEADLESS,
locale_code="en",
ad_block=True,
proxy=proxy or PROXY,
proxy=proxy,
) as sb:
yield sb