benbusby / whoogle-search

A self-hosted, ad-free, privacy-respecting metasearch engine
https://pypi.org/project/whoogle-search/
MIT License
9.37k stars 926 forks source link

[BUG] socks5 proxy config gives Internal server error 500 #1138

Open dave0003 opened 5 months ago

dave0003 commented 5 months ago

Describe the bug When configured to use a socks5 proxy, the result is an "Internal server error (500)".

To Reproduce Steps to reproduce the behavior:

  1. Start whoogle-search with options "--proxytype socks5 --proxyloc 127.0.0.1:8310" where there is a local socks5 proxy server running at 127.0.0.1 port 8310.
  2. Perform search.
  3. Receive Internal server error (500)

Deployment Method

Version of Whoogle Search

Desktop (please complete the following information):

Additional context whoogle-search is using nginx as a reverse proxy. Other startup parameters: whoogle-search --port 6000 --host 127.0.0.1 --https-only

I've tried with and without --https-only (makes no difference to the error). I've tried with --debug but it doesn't give any helpful clue, just a POST for the search and a GET with status 500.

dave0003 commented 5 months ago

I looked into this some more, and it appears that without manually installing PySocks, the socks5 proxy won't work. I had originally installed whoogle-search with pipx, and there's no way to manually install PySocks through pipx.

After setting up a virtual environment and manually installing whoogle-search and PySocks, I was able to get it to work.

I see a lot of requirements in requirements.txt (including PySocks) that don't get installed automatically as a dependency. It still seems to work without those, though (as far as I can tell), except in the case of PySocks.

dave0003 commented 5 months ago

Also, in case anybody is trying to get socks5 to work, there's 2 different socks5 settings for WHOOGLE_PROXY_TYPE:

socks5 socks5h

socks5 is similar to "curl --socks5" and socks5h is similar to "curl --socks5-hostname".

socks5 = Local DNS resolution socks5h = Remote DNS resolution

This is important sometimes, for example, if the remote proxy is IPv4 only and the DNS resolution is local, it may lookup an IPv6 for google and fail.