web-dev-qa-db-ja.com

カールとシステムプロキシ

現在、すべてのトラフィックをsshトンネル経由で転送しています。

ssh -ND 8080 user@remote-machine

そして、システムのsocks5プロキシを(ネットワークセクションのシステム設定で)127.0.0.1:8080に設定しました。すべて正常に動作し、Google Chromeおよびその他のプログラムは想定どおりにソックスプロキシを使用しています。

問題は、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を機能させるにはどうすればよいですか?私は常にプロキシを使用したいとは限らないので、両方のケース(プロキシとプロキシなし)で機能するエイリアスを設定できるようにしたいと思います。

2
s3v3n

HTTPプロキシの場合、-xを使用します。

$HOME/.curlrcを持っている

-x 127.0.0.1:8080

または、プロキシ使用のためにcurl -x 127.0.0.1:8080 ...を使用してエイリアスを作成します。

SOCKSプロキシの場合、man curlを見ると次のようになります。

   --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

2
Tuminoid