試してみると、wget
ホスト名の解決に問題はありません。
root:here cd$ wget https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1
明らかにする
Resolving gfe.cit.api.here.com... 52.51.134.116, 54.154.19.134, 52.208.9.155
Connecting to gfe.cit.api.here.com|52.51.134.116|:443... connected.
HTTP request sent, awaiting response... 400 Bad Request
2016-12-24 13:18:47 ERROR 400: Bad Request.
しかし、私が使うときping
ping https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1
明らかにする
cannot resolve https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123: Unknown host
wget
ホスト名の解決に失敗しました。との違いは何ですかping
?
答え1
答え:
ホスト名解決に関して、「ping」と「wget」の違いは何ですか?
Ping
パラメータにはIPアドレスまたはホスト名が必要です。完全なURLを提供し、それをホスト名として解決しようとしましたが、失敗します。完全修飾名の削除を除くすべての操作により、コマンドはping
接続を確認できました(要求がICMP
ブロックされたか、サーバーがダウンしているため、次のテストでは失敗しました)。
$ ping gfe.cit.api.here.com
Pinging cle2-cit.eu-west-1.elasticbeanstalk.com [54.154.19.134] with 32 bytes of data:
Request timed out.
ping
wget
.
エラー400を説明する理由は、roaimaのトピックを参照してください。
答え2
実際にリクエストした質問に答えます。wget
URLは必須ですが、ping
ホスト名は必須です。 URLは、プロトコル(https
)、ホスト名(gfe.cit.api.here.com
)、パス(/1/layer_put.json
)、および3つのエンコーディングパラメータ()で構成されていますlayer_id=123&app_id=x2&app_code=x1
。認証やポートなどの他のエントリも URL に表示されることがあります。
このコマンドはホスト名部分のみを受け入れますping
。
その後、コマンドはプロトコルwget
に必要なポート(443/tcp
の場合https
)へのTCP / IP接続を開き、HTTPプロトコルを使用して指定されたURLからコンテンツを取得します。
このping
コマンドは ICMP を使用して送信されます。平らな指定されたホストに要求して返します。エコ返信返信するこれはそれぞれICMPパケットタイプ8と0です。
失敗の根本的な原因は、wget
パラメータを引用していないwget
ため、シェルがそれを解析することです。&
URLの中央にある文字は、シェルにバックグラウンドからそのポイントまでのすべてを実行するように指示します。その後、行の残りの2つの部分をすぐに実行し、すぐにエラーが発生します。
URLの周りに一重引用符を使用すると、期待どおりに機能できます。
だから私たちは
wget -O layer_put.json 'https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1'
ping -c3 gfe.cit.api.here.com
答え3
Wget は主に HTTP、HTTPS、および FTP 経由のダウンロードに使用されるため、デフォルトでは接続に TCP を使用します。 Pingは次の方法を使用します。ICMP、基本的にホストに「こんにちは」と言って応答することを確認します。 ICMP はポートを使用しません。これはhttp://を意味します。 HTTPS ポート 443 に対して、ポート 80 で「接続を開くように」コンピューターに指示します。 ICMPはポートを使用しないため、pingにはIPアドレスのみが必要ですが、wgetはTCP接続を確立してファイルをダウンロードします。