bashネットワークリダイレクトを使用してパスを含むURLにhttpリクエストを送信するにはどうすればよいですか?

bashネットワークリダイレクトを使用してパスを含むURLにhttpリクエストを送信するにはどうすればよいですか?

Bashネットワークリダイレクトを使用すると、単純なgetメッセージを次のようにすべてのサーバーに送信できます。

:> /dev/tcp/localhost/3306

しかし、私はパスを含むURLにリクエストを送信するより複雑な作業をしたいと思います。私は以下を試しました:

:> /dev/tcp/url/50070/webhdfs/v1/user/user_name/new_file?user.name=user_name&op=READ

投げたもの:

[1] 69
root@9ec4a825d97d:/# *bash: 50070/webhdfs/v1/user/user_name/new_file?user.name=user_name: Servname not supported for ai_socktype
bash: /dev/tcp/url/50070/webhdfs/v1/user/user_name/new_file?user.name=user_name: Invalid argument

URL(インクルード&)が引用されている場合も同様です。

可能であれば、bash net Redirectを使用してルート付きURLにリクエストを送信するにはどうすればよいですか?

ベストアンサー1

bash(この機能が元のkshのように)で/dev/tcp/host/portTCPソケットの作成と接続を開きます。

これに加えて、HTTP要求を送信できますが、HTTPプロトコルに手動で作成する必要があります。たとえば、次のようになります。

exec 3<> /dev/tcp/host/port # connected TCP socket on fd 3
printf >&3 '%s\r\n' 'GET /some/path?query HTTP/1.0' \
                    'Host: host' \
                    'Connection: close' \
                    ''
cat <&3 # read the response
exec 3<&- # close the connection

またはzsh均等に:

zmodload zsh/net/tcp
ztcp -d3 host port
printf >&3 '%s\r\n' 'GET /some/path?query HTTP/1.0' \
                    'Host: host' \
                    'Connection: close' \
                    ''
cat <&3 # read the response
ztcp -c 3 # close the connection

これは暗号化されていないHTTPなので、比較的簡単なテキストです。 HTTPSを実行するには、TLSプロトコルにバイナリデータを作成する必要があります。これは、より良い方法(たとえば、socatまたは)でTCP接続自体を作成するための特別なツールを使用しないとほとんど不可能です。openssl s_client特別な道具を使わなくても大丈夫です。 、、、、、...などのHTTP(S)要求を実行するように設計されていますcurlwgetperlLWPelinksw3mlynx

おすすめ記事