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

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

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

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

2回答

1441閲覧

HTTP サーバーのIndexページのアドレスを取得したい

LaLaLand

総合スコア107

HTTP

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

3クリップ

投稿2015/10/04 10:43

httpサーバーからインデックスページのアドレスを取得したいと思っています。

たとえば、
http://kakaku.com/
のアドレスを入力したら、
http://kakaku.com/index.html
を取得。また、
http://kakaku.com/pc
を入力したら、
http://kakaku.com/pc/index.html
を取得したいと思っています。

どのようにして取得したらよいでしょうか。
お願いいたします。

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

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

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

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

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

guest

回答2

0

アドレスだけ取得できればいいんですよね。
以下のようなコードで良いかと思います。

C#

1using System; 2 3public class ReturnIndex 4{ 5 public static void Main(string[] args) 6 { 7 //引数があるとき、その引数はargsの配列になってる。 8 if args.length == 1 { 9 //末尾が "/" で終わっているかどうか。 10 if (args[0].EndsWith("/")) { 11 //入力されたアドレスに index.html を足す 12 Console.Write("{0}index.html", args[0]); 13 } else { 14 //入力されたアドレスに /index.html を足す 15 Console.Write("{0}/index.html", args[0]); 16 } 17 } else { 18 Console.Write("アドレスを1つ入力して下さい。"); 19 } 20}

これを実行すると、

bash

1#末尾が / で終わってるとき 2ReturnIndex.exe http://kakaku.com/ 3-> http://kakaku.com/index.html 4 5#末尾が / で終わってないとき 6ReturnIndex.exe http://kakaku.com/pc 7-> http://kakaku.com/pc/index.html 8 9#引数が1つ以外の時はエラーを返す。 10ReturnIndex.exe http://kakaku.com/ http://kakaku.com/pc 11-> アドレスを1つ入力して下さい。

と、なります。
やりたい事と合ってますかね?

参考:
コマンドライン引数
http://ufcpp.net/study/csharp/st_command.html
末尾の文字列と一致するかどうか判断する
http://jeanne.wankuma.com/tips/csharp/string/endswith.html

投稿2015/10/04 11:11

SKYYFISH

総合スコア654

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

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

LaLaLand

2015/10/04 11:29

ありがとうございます。 やりたいことに近いのですが、若干違います。 サーバーから返してくるIndexページのファイル名は"index.html"と限りません。 たとえば、  http://www.smbc-card.com/nyukai/card/ を入力した場合に返してほしいのは、  http://www.smbc-card.com/nyukai/card/index.jsp です。 index・・・ゴニョゴニョで一体何を返すのかは、サーバーの設定に依存します。 確か、IISの場合 default.html がデフォルト値だったと思います。当然その場合はdefault.htmlを取りたいのです。 ご存知でしょうか。 よろしくお願いいたします。
guest

0

csharp

1public class Program 2{ 3 public static void Main(string[] args) 4 { 5 string url = GetRelocatedUrl("http://kakaku.com/pc"); 6 Console.WriteLine(url); 7 } 8 9 private static string GetRelocatedUrl(string url) 10 { 11 var req = WebRequest.Create(url) as HttpWebRequest; 12 req.AllowAutoRedirect = true; 13 req.Method = "HEAD"; 14 15 using (var res = req.GetResponse()) 16 { 17 return res.ResponseUri.AbsoluteUri; 18 } 19 } 20}

書くだけ書いてテストしてみたら index.html が付いていませんでした…。
レスポンスヘッダからサーバー名は分かることが多いので、そこから当て推量でファイル名を付けて順次 200が返ってくるまでリクエストを送ってみたらどうでしょうか。
相手側の迷惑になるのでアレですが。

投稿2015/10/06 08:21

htsign

総合スコア870

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

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

LaLaLand

2015/10/12 14:16

> レスポンスヘッダからサーバー名は分かることが多いので、 > そこから当て推量でファイル名を付けて順次 200が返ってくるまで > リクエストを送ってみたらどうでしょうか。 さすがに、それは・・・サーバー側からすれば荒らし行為と区別付けられないと思いますが
htsign

2015/10/12 15:11

まぁそうですよね…。私もアウトだと思ってます。 ただ、法律関係は明るくないため適当な発言になってしまい恐縮なのですが、有名な某図書館のクローリング事件では1秒に1回程度なら問題ないとのお達しも出ていた気もするので、相手方のサーバの能力次第ではもしかしたら大丈夫かもしれません。 1つのサーバーに対してindexファイルが見つかったらそのURLをローカルにキャッシュすれば2度目以降は1度のリクエストで済みますが、まぁどちらにせよあまり良い方法とは言えないですね。 お役に立てず申し訳ないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問