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

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

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

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

HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

C#

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

Q&A

解決済

1回答

757閲覧

プロキシを動的に切り替えた上でのHttpClientのstatic化の実装方法

okkotonushi89

総合スコア9

HTTP

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

HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

C#

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

0グッド

0クリップ

投稿2019/03/16 11:57

前提・実現したいこと

C#のHttpClientを使用して、予め指定したプロキシを経由して、定期的に同じHTTPのリクエストを送りたいと考えています。

発生している問題・エラーメッセージ

複数回、同じリクエストを投げる場合、
以下のページでは、リクエストごとにHttpClientをインスタンス化するのはリソースを食いつぶすので、
static化をせよと記載されています。

https://docs.microsoft.com/ja-jp/dotnet/api/system.net.http.httpclient?view=netframework-4.7.2

しかしながら、経由したいプロキシの候補が複数あるため、static化の記述方法が分からなくて困っています。
予め設定ファイルにプロキシのリストを記載しておき、それを読み込み、それぞれごとに定期的なリクエストを投げることを想定していますが、
プロキシのリストの個数が設定ファイルごとに変わるため、static文が上手く記述できないです。

該当のソースコード

以下のコードは一つのHttpClientのインスタンスを作成しています。(上記のマイクロソフトのサイトより)

C#

1public class GoodController : ApiController 2{ 3 // OK 4 private static readonly HttpClient HttpClient; 5 6 static GoodController() 7 { 8 HttpClient = new HttpClient(); 9 } 10}

このstatic文を動的に変更するプロキシの個数分作れるようにしたいです。

試したこと

static化をせずに通常のインスタンス化を初回行い、2回目以降はそれを使いまわそうとしましたが、
その場合、InvalidOperationExceptionが表示され、すでに送信済みですとなってしまいます。

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

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

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

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

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

Zuishin

2019/03/16 12:33

プロキシの数はどのくらいあるんですか? 二つ三つだったらその数だけ HttpClient を作れば良さそうですが。
okkotonushi89

2019/03/16 12:34

最大で100くらいを想定しています。
Zuishin

2019/03/16 12:36

自作自演用ですか?
okkotonushi89

2019/03/16 12:44

自作自演用?ではないと思います。 サーバのステータス確認をしたいだけなので。 100は極端な場合でおそらく通常は数個ぐらいですね。
guest

回答1

0

ベストアンサー

配列なりListなりをstaticで持てばいいのでは?

投稿2019/03/16 13:50

YAmaGNZ

総合スコア10258

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問