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

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

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

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

Q&A

解決済

1回答

1086閲覧

Net::HTTPでSSL通信 構文について

kazuyakazuya

総合スコア193

Ruby

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

0グッド

0クリップ

投稿2019/07/22 15:13

編集2019/07/22 15:24

前回の質問で謎のエラーの原因が分かったのでコードを変更したのですが
分からないところがあるのでお願いします。
前回・・・ リンク内容

前回のを改良したコード

ruby

1require 'net/http' 2require 'uri' 3http = Net::HTTP.new("docs.ruby-lang.org",443) 4http.use_ssl = true 5http.verify_mode = OpenSSL::SSL::VERIFY_NONE 6a = http.send_request("GET","Net=3a=3aHTTP.html") 7a.each do |name,value| 8 puts name + ":" + value 9end

http

1400 2server:nginx/1.10.3 3content-type:text/html 4accept-ranges:bytes, bytes, bytes, bytes 5via:1.1 varnish, 1.1 varnish 6content-length:173 7date:Mon, 22 Jul 2019 14:49:05 GMT 8connection:close 9x-served-by:cache-tyo19938-TYO, cache-hnd18728-HND 10x-cache:MISS, MISS 11x-cache-hits:0, 0 12x-timer:S1563806946.744143,VS0,VE8 13<html> 14<head><title>400 Bad Request</title></head> 15<body bgcolor="white"> 16<center><h1>400 Bad Request</h1></center> 17<hr><center>nginx/1.10.3</center> 18</body> 19</html>

前回とは別のステータスコードが出てきました。
(前回が301、そして今回が400)
ただ前回とは違いリダイレクトが起こっていないと思うのでSSLでの
接続は成功している・・・たぶん

参考書には

400 このレスポンスは、リクエストの構文が間違っていることを表しています。 このエラーが発行された場合、リクエストの内容を見直してから再送信 する必要があります。 また、ブラウザはこれを200OKと同様に扱います。

つまり、SSLは成功しているがどこか構文が間違えているという
ことだと思うのですが何が間違えているのかがわかりません。
わからないのでお願いします。


以下の質問はできたらお願いします。

今回はレスポンスを取得するのに

ruby

1send_request ・・・headメソッドでも可

を使っていますが
前回のコードと同様に

ruby

1get_response

を使う方法はないでしょうか?

get_responseを使おうとすると
イメージ説明
リファレンスの通りホスト(ドメイン)を指定する必要が出てきます。
つまり、newとget_responseを組み合わせて使おうとすると

ruby

1require 'net/http' 2require 'uri' 3http = Net::HTTP.new("docs.ruby-lang.org",443) 4http.use_ssl = true 5http.verify_mode = OpenSSL::SSL::VERIFY_NONE 6a = http.get_response("docs.ruby-lang.org","Net=3a=3aHTTP.html",443)←ここ!

とのようにめちゃくちゃな構文になってしまいます。
ここで重要なのはレスポンスを送る前の段階

ruby

1http = Net::HTTP.new("docs.ruby-lang.org",443) 2http.use_ssl = true

上記を定義しておかなければならないというところです。
ほかにいい方法はありますでしょうか?
助言をお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

SSL接続は成功しています。
パス("Net=3a=3aHTTP.html")が/から始まっていないので400です。
ただ、/を付けてもそういうパスは存在しないので、404ですね。
正しいパスを指定しましょう。

get_responseを使う方法は前回回答しました。
どこをどう間違えたのか分かりませんが、間違えずにやれば出来ます。

投稿2019/07/22 15:26

otn

総合スコア84499

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

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

otn

2019/07/22 15:27

なかなか進歩が無いようですが、疑問点をすぐに聞くのじゃなくて、自分で数時間とか半日とか考えるようにしないと、進歩しませんよ。
kazuyakazuya

2019/07/22 15:35

無事に200が返ってきてくれました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問