В настоящее время я пересылаю весь свой трафик через туннель ssh:
ssh -ND 8080 user@remote-machine
И установил прокси-систему system socks5 (в настройках системы в разделе сети) значение 127.0.0.1:8080
. Все работает нормально, Google Chrome и другие программы используют прокси socks, как и предполагалось.
Проблема возникает, когда я пытаюсь использовать curl
(либо в терминале, либо в PHP
). Что я получаю, это:
user@laptop:~$ curl -v google.com
* About to connect() to proxy 127.0.0.1 port 8080 (#0)
* Trying 127.0.0.1... connected
> GET HTTP://google.com HTTP/1.1
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: google.com
> Accept: */*
> Proxy-Connection: Keep-Alive
>
* Empty reply from server
* Connection #0 to host 127.0.0.1 left intact
curl: (52) Empty reply from server
* Closing connection #0
Я пытался гуглить вокруг, но не мог найти ничего подходящего. Так как мне заставить curl работать с системным прокси (если есть)? Я хотел бы иметь возможность настроить псевдоним, который будет работать в обоих случаях (прокси и без прокси), потому что я не всегда буду хотеть использовать прокси.
Для HTTP-прокси используйте -x
.
Имейте $HOME/.curlrc
с
-x 127.0.0.1:8080
или создайте псевдонимы, используя curl -x 127.0.0.1:8080 ...
для использования прокси.
Для SOCKS прокси, глядя на man curl
, говорится:
blockquote>--socks5 <host[:port]> Use the specified SOCKS5 proxy - but resolve the host name locally. If the port number is not specified, it is assumed at port 1080. This option overrides any previous use of -x, --proxy, as they are mutually exclusive.
Итак, используйте
curl --socks5 127.0.0.1:8080
, т.е.curl --socks5 $socks_proxy
.