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

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

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

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

Q&A

解決済

1回答

3325閲覧

HttpWebRequestでGETを複数回送るとタイムアウトする

omochi-_-

総合スコア3

C#

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

0グッド

0クリップ

投稿2021/10/03 07:22

C#でログインしたサイトの情報をまとめて受け取るソフトを作っています
HttpWebRequestでGETを複数回送るとなぜかタイムアウトします
バージョンは.NET Framework 4.7.2です

C#

1 static void Get_Web_Page(CookieContainer cc,string url) 2{ 3        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 4 WebResponse res = req.GetResponse(); 5 Stream resStream = res.GetResponseStream(); 6 StreamReader sr = new StreamReader(resStream, enc); 7 8 9 // HTTP GET リクエスト 10 req = (HttpWebRequest)WebRequest.Create(url); 11 req.CookieContainer = cc; 12 res = req.GetResponse(); 13 resStream = res.GetResponseStream();//二回目のここで止まる 14 sr = new StreamReader(resStream, enc); 15 result = sr.ReadToEnd(); 16 sr.Close(); 17 resStream.Close(); 18 result = Regex.Unescape(result);//unicode エスケープ解除 19 using (StreamWriter sw = new StreamWriter(Current_Path+URL_LIST[count] + ".txt", false, enc)) 20 { 21 sw.Write(result); 22 } 23     24 }

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

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

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

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

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

guest

回答1

0

自己解決

自己解決できました
ループ中に毎回関数を呼び出すのではなく、関数の中でループさせたらうまくいきました!
HttpWebRequest は使いまわさないとだめだったんですね・・・

C#

1 static void Get_Web_Page(CookieContainer cc) 2 { 3 count = 0; 4 5 url = "https://hoge.jp/" + URL_LIST[count] + ".php"; 6 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 7 WebResponse res = req.GetResponse(); 8 Stream resStream = res.GetResponseStream(); 9 StreamReader sr = new StreamReader(resStream, enc); 10 req.CookieContainer = cc; 11 while(!(URL_LIST.Count == count)) 12 { 13 Console.WriteLine(count+"回目のループ"); 14 res = req.GetResponse(); 15 resStream = res.GetResponseStream(); 16 sr = new StreamReader(resStream, enc); 17 result = sr.ReadToEnd(); 18 sr.Close(); 19 resStream.Close(); 20 result = Regex.Unescape(result);//Unescape(result); 21 using (StreamWriter sw = new StreamWriter(Current_Path+URL_LIST[count] + ".txt", false, enc)) 22 { 23 sw.Write(result); 24 } 25 count++; 26 27 if (URL_LIST.Count == count) { break; } 28 url = "https://hoge.jp/" + URL_LIST[count] + ".php"; 29 req = (HttpWebRequest)WebRequest.Create(url); 30 Thread.Sleep(1000); 31req.CookieContainer = cc; 32 } 33 34 35 }

投稿2021/10/03 07:31

編集2021/10/03 07:39
omochi-_-

総合スコア3

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

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

退会済みユーザー

退会済みユーザー

2021/10/04 00:59 編集

そもそも、Microsoftは新規開発でのHttpWebRequestの使用は推奨していません。HttpClientを使いましょう。 [HttpWebRequest] https://docs.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest?view=net-5.0 > Remarks > Important > We don't recommend that you use HttpWebRequest for new development. Instead, use the System.Net.Http.HttpClient class.
omochi-_-

2021/10/04 04:42

別のものが推奨されてたんですね・・・HttpClient使ってみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問