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
の違いは何ですか?
回答:
ホスト名の解決に関して、「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
の一般的な違いについては、Alecの回答を参照してください。
エラー400を説明する考えられる理由については、roaimaのものを参照してください。
Wgetは主にHTTP、HTTPS、およびFTPを介したダウンロードに使用されるため、デフォルトでは接続にTCPを使用します。Pingは[〜#〜] icmp [〜#〜 ]、これは基本的にホストに「こんにちは」と言って、それが応答するかどうかを確認します。ICMPはポートを使用しません。これはhttp://が意味することです。「コンピュータ」にポート80で接続を開くように指示します、 "およびHTTPSポート443の場合。ICMPはポートを使用しないため、pingはIPアドレスのみを予期しますが、wgetはTCP接続を確立し、ファイルをダウンロードします。
あなたが実際に尋ねた質問に答えるために。 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
コマンドは、プロトコルが期待するポート(https
の場合は443/tcp
)へのTCP/IP接続を開き、HTTPプロトコルを使用して指定された場所からコンテンツを取得しますURL。
ping
コマンドは、ICMPを使用してping要求を指定されたホストに送信し、ホストはエコー応答応答を返します。これらは、それぞれ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