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

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

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

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

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

C#

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

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

Q&A

解決済

1回答

4593閲覧

C#で認証なしプロキシを通すHTTPSクライアントを作成したい

spookies

総合スコア15

HTTP

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

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

C#

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

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

0グッド

0クリップ

投稿2018/10/22 08:39

編集2018/10/22 08:51

C#でWebAPIの単体テストを行うHTTPSクライアントを作成したいと考えています。
指定されたURLにPOSTリクエストでJSON形式のデータを通知したいのですが、以下の点が不明で困っています。

①プロキシ(認証なし)を通過できていない(っぽい)
②そもそも通知しようとしているメッセージをWireSharkで確認できない。

①のプロキシ設定はインターネットオプションの設定のみで、ソース上では行っていません。
②は①の関連でそもそもAPIがホストに通知されていないのだと考えています。

ソースは以下のような感じです。

C#

1 Uri uri = new Uri("https://provider/api"); 2 HttpClient client = new HttpClient(); 3 client.DefaultRequestHeaders.Host = uri.Host; 4 client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 5 client.DefaultRequestHeaders.Add("APIKEY", "key"); 6 HttpResponseMessage message = await client.PostAsync(uri, content); 7 if (message.IsSuccessStatusCode) 8 { 9 Console.WriteLine(message.IsSuccessStatusCode); 10 }

APIのパラメータはJson形式では正しいことを確認しています。このJSON形式のデータをStringContentでPostAsyncの引数としています。
Web関連の開発がよくわかってないので、ご教示お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

パケットキャプチャよりも、Fiddler を使ってリクエストとレスポンスを確認してみてください。
FiddlerなしでHttp/Https通信を書くのは苦行です。

投稿2018/10/22 09:38

hihijiji

総合スコア4150

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

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

spookies

2018/10/22 09:56

パラメータの妥当性はFiddlerで確認しましたが、Fiddlerってほかのクライアントのメッセージも自動的に解析してくれますか? Fiddlerを起動した状態で作成したアプリを実行してみましたが、Fiddler上に通信ログが追加されません。ということことはプロキシよりも先に通知されていないと考えたほうがいいでしょうか?
hihijiji

2018/10/22 10:15

ローカルプロキシですから原則的に通信するクライアント専用です。
退会済みユーザー

退会済みユーザー

2018/10/23 02:34

質問のコードでは URL は https://provider/api とのことですが、開発環境で検証している時は https://localhost/... になっていませんか? Fiddler はクライアントが IE などのブラウザの場合は localhost でもキャプチャしますが、クライアントが HttpClient を使ったアプリの場合は少なくとも自分が試した限りではキャプチャできなかったです。 hosts ファイルに例えば 127.0.0.1 mywebapi.com を追加して 、要求 URL を https://mywebapi.com/api というようにしてみたらどうなりますか?
spookies

2018/10/23 02:52

開発環境でもURLはhttps://provider/api としています。ホストをlocalhostに変更して試してみましたが、FiddlerにもWiresharkでもキャプチャできませんでした。やはりPostAsyncメソッドでメッセージ送信できていないということでしょうか?
退会済みユーザー

退会済みユーザー

2018/10/23 04:11 編集

要求が出ていない / 応答が返ってきてないなどのキャプチャ以前の問題はありませんか? 質問に書かれたコードが正しいのかどうか分かりませんでした。 HTTPS ではなく、相手は WCF ですが、HttpClient を利用して JSON 文字列を送信し JSON 文字列を受信するのは以下の記事のコードでできます。Fiddler でキャプチャしながらでも要求 / 応答は期待通りとなりますので、プロキシ(Fiddler はプロキシ)も通っているということになります。ご参考まで。 http://surferonwww.info/BlogEngine/post/2018/02/24/request-wcf-service-using-httpclient.aspx
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問