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

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

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

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

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Q&A

解決済

1回答

4496閲覧

socket HTTPリクエスト送ったけど返ってこない(HTTPサーバーに対して)

kazuyakazuya

総合スコア193

Ruby

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

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

0グッド

0クリップ

投稿2019/07/25 12:11

編集2019/07/25 12:41

前回の質問とほぼ
変わらないです。
前回はHTTPSのサイトに対して生のHTTPを送っていることが原因でだめだったみたいなので
今回はHTTPのサイトにリクエストを送っています。

ruby

1require 'socket' 2post = TCPSocket.open("www.metro.tokyo.jp",80) 3 4 post.write('GET / HTTP/1.1(CR+LF) 5 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3(CR+LF) 6 Accept-Encoding: gzip, deflate(CR+LF) 7 Accept-Language: ja,en-US;q=0.9,en;q=0.8(CR+LF) 8 Cache-Control: max-age=0(CR+LF) 9 Connection: keep-alive(CR+LF) 10 Host: www.metro.tokyo.jp(CR+LF) 11 If-Modified-Since: Thu, 25 Jul 2019 08:36:32 GMT(CR+LF) 12 Referer: https://www.google.com/(CR+LF) 13 Upgrade-Insecure-Requests: 1(CR+LF) 14 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36(CR+LF)(CR+LF) 15 ') 16 17while a = post.gets 18 puts a 19end 20 21 22 post.close

前回

ruby

1post = TCPSocket.open("www.metro.tokyo.jp",443)

使っていいポート
前回と同じくデバッグツールでリクエストヘッダーをあらかじめ
取得し、それをsocketで送る形となっています。

実行結果としてエラーこそ起こらず送ることはたぶんできているとおもうのですが
レスポンスが返ってこないので適切に送れているか
さえ分からない状況です。
ポートの部分をシングルクォーテーションにしたりと
いろいろためしたのですがだめでした。

もしかしたら、リクエストの作り方から間違えているかもしれません。
デバッグツールですが
検証>network>headerで見れたRequest Headersの部分と

ruby

1GET / HTTP/1.1(CR+LF)

をくっつけただけです。
わからないのでお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

443ポートを使うのはサーバー側のはずなので

今回は50000です。

勘違いがあるようです。openで指定するのはサーバー側のポート番号です。
クライアント側のポート番号は、空いている番号から適当に割り当てされます。

#追記
動くように書き換えると、こうです。
(CR+LF)を全部削除
・行頭の空白を削除
・最後に空行を追加

Ruby

1require 'socket' 2post = TCPSocket.open("www.metro.tokyo.jp",80) 3 4post.write('GET / HTTP/1.1 5Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 6Accept-Encoding: gzip, deflate 7Accept-Language: ja,en-US;q=0.9,en;q=0.8 8Cache-Control: max-age=0 9Connection: keep-alive 10Host: www.metro.tokyo.jp 11If-Modified-Since: Thu, 25 Jul 2019 08:36:32 GMT 12Referer: https://www.google.com/ 13Upgrade-Insecure-Requests: 1 14User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 15 16') 17 18while a = post.gets 19 puts a 20end 21 22post.close

If-Modified-Since: Thu, 25 Jul 2019 08:36:32 GMT
が付いているので、「その日時以降、変わってないよ」というHTTP/1.0 304 Not Modifiedが返ってきます。

投稿2019/07/25 12:37

編集2019/07/25 13:51
otn

総合スコア84423

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

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

kazuyakazuya

2019/07/25 12:40

もう一度も直したらそうでした ありがとうござます。 訂正しておきます
otn

2019/07/25 12:46

意図通り動きましたか?
kazuyakazuya

2019/07/25 12:48

だめでした。。。 レスポンスが表示されません。
otn

2019/07/25 12:51

実際に動かしているコードに変更して下さい。 (CR+LF)の部分をどう書いているのか?
kazuyakazuya

2019/07/25 12:54 編集

実際に動かしているコードのままで、 (CR+LF)もその通りに書いています。
otn

2019/07/25 12:56

どういう理由で?? そりゃだめです。
kazuyakazuya

2019/07/25 12:58

いくつか前の質問の回答で教えてもらったのと 改行についてchromeで調べたら windowsはCR+LFと書いてあったので...
otn

2019/07/25 13:07

CRとは何か?LFとは何か?を調べましたか?
kazuyakazuya

2019/07/25 13:10

調べ方があっているかわかりませんが調べました。 改行コード。違うのでしょうか?
kazuyakazuya

2019/07/25 13:20

認識があまかったです。 ありがとうございます。
otn

2019/07/25 13:30

また、今回のケースは、httpサーバーに送るデータなので、あなたが使っているPCがWindowsかどうか等は関係ありません。 HTTPプロトコルの改行もCRLFですが、LFだけでも大丈夫なサーバーが多数のはずです。
kazuyakazuya

2019/07/25 13:44 編集

わかりました。 あと、さっき教えてもらった やつなのですが ¥が打てないので バックスラッシュnなど一通り試したのですがやはりだめでした。。。 追記 バックスラッシュnで文字列を改行できました。
otn

2019/07/25 13:53

\は、半角バックスラッシュです。 ただし、シングルクォートで囲んだ文字列内では、バックスラッシュシーケンスは無効です。先に示したRubyリファレンス参照。
kazuyakazuya

2019/07/25 14:04

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問