質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Q&A

解決済

2回答

1845閲覧

Net::HTTPのSSLでGetしたときのレスポンスについて

kazuyakazuya

総合スコア193

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

0グッド

0クリップ

投稿2019/07/22 09:20

編集2019/07/22 09:42

リンク内容このサイトに
Net::HTTPで叩いてそのレスポンスの結果でわからないところがあったのでお願いします。

ruby

1require 'net/http' 2 3 user_ssl = true 4 http = Net::HTTP.get_response("docs.ruby-lang.org","Net=3a=3aHTTP.html") 5 puts "HTTP/" + http.http_version 6 puts http.code 7 puts http.message 8 http.each_capitalized do |name, value| 9 puts name + ":" + value 10 end 11 puts http.body 12

cmd

1HTTP/1.1 2301 3Moved Permanently 4Server:Varnish 5Retry-After:0 6Location:https://docs.ruby-lang.orgNet=3a=3aHTTP.html 7Content-Length:0 8Accept-Ranges:bytes 9Date:Mon, 22 Jul 2019 09:07:45 GMT 10Via:1.1 varnish 11Connection:close 12X-Served-By:cache-nrt6132-NRT 13X-Cache:HIT 14X-Cache-Hits:0 15X-Timer:S1563786466.896829,VS0,VE1

質問1
レスポンスが帰ってきていることからサーバー自体の接続に
成功していると言えますか?

質問2
ステータスラインが301なのはどういうことなのでしょうか?

参考書にはリクエストされたリソースには新しいURLが割り当てられて
いるから今後はそのリソースを参照するURLを使用すべきである。

・・・と書かれているのですがどういうことなのでしょうか?
また、
Moved Permanently これはリダイレクトみたいなのですが
なにが原因なのかが知りたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

https://docs.ruby-lang.org/ja/latest/class/Net=3a=3aHTTP.htmlにアクセスしようとしてるつもりでしょうか?

そうであるなら、このコードは2点の誤りがあります。

  1. httpへアクセスしている
  2. Net=3a=3aHTTP.htmlを取得しようとしている

レスポンスが帰ってきていることからサーバー自体の接続に

成功していると言えますか?

どのサーバーへの接続かというのが問題になります。
https://docs.ruby-lang.orgへの接続なら失敗しています。
http://docs.ruby-lang.orgへならば成功と言えないこともないでしょう。

ステータスラインが301なのはどういうことなのでしょうか?

リダイレクトです。
そのなかでも、
「今回使ったURLは常に今回返却されたLocationにリダイレクトします」というメッセージです。
(ブラウザは、結果をキャッシュして次に同じURLが来たらリダイレクト先へ直接問い合わせてもよい)

ruby

1require 'net/http' 2http = Net::HTTP.new("docs.ruby-lang.org", 443) 3http.use_ssl = true 4res = http.get("/ja/latest/class/Net=3a=3aHTTP.html") 5 6puts "HTTP/#{res.http_version}" 7puts res.code 8puts res.each.map{|k,v| "#{k}:#{v}"} 9puts res.body

投稿2019/07/22 10:42

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2019/07/22 13:14

ありがとうございます。 上記のコードで不明点があるのでよろしければお願いします。 まず、getはエンティティを取得するメソッドなのに res = http.get("/ja/latest/class/Net=3a=3aHTTP.html") なんでresにhttp_versionを使えるのですか? http_versionはエンティティヘッダーではなく ステータスラインのやつだと思うのですが。。。 あと、コードを実行するとエラーになってしまいます
asm

2019/07/22 14:49

> getはエンティティを取得するメソッドなのに http.rbに書かれているドキュメントコメントを見ると # Retrieves data from +path+ on the connected-to host which may be an # absolute path String or a URI to extract the path from. となっているので、(狭義の)エンティティを取得するメソッドというのは誤解であり、 より広義な「データを取得する。」の方が正しいです。 そして、返却されるのがNet::HTTPResponseですのでhttp_versionを使えます。 エラーについては、環境によってはputs res.bodyが長すぎてエラーになるようですね
guest

0

ベストアンサー

延々とリダイレクトで躓いていますね。そんなにリダイレクトが難しいですか?
1.
そうです。

2.
永久的なリダイレクトです。
301Moved Permanentlyは同じ意味です。というか、301に限らず、http.codehttp.messageは、それぞれ数字と文字列で同じ意味を示します。

httpsでアクセスするべきサイトにhttpでアクセスしたので、httpsのURLに誘導されています。
他にも、旧サイトにアクセスしたら、新サイトに誘導するとかの場合に永久的なリダイレクトを使います。

投稿2019/07/22 13:07

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2019/07/22 13:11

ありがとうございます。 301が何を言いたいのかがやっとわかりました。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問