私は HttpClient クラスが初めてで、Charles Proxyを使用したリクエストの監視に問題があります。基本的に必要なのは、シミュレータまたは実際の iOS デバイスからのリクエストを監視することです。ここでは、Charles を iOS 開発用に構成する方法の優れたチュートリアルを見つけることができます。たとえば、単純な承認だけで、単純な HttpClient リクエストを作成していました
async Task<string> authorizeUser()
{
HttpClient _client = new HttpClient ();
_client.BaseAddress = new Uri("https://...../api/");
_client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue ("bearer", token);
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("grant_type", "password"),
new KeyValuePair<string, string>("username", "theUserName"),
new KeyValuePair<string, string>("password", "thePassword")
});
var result = await _client.PostAsync("auth", content);
string resultContent = result.Content.ReadAsStringAsync().Result;
return resultContent;
}
コードが機能し、ユーザーが承認され、ベアラー トークンが返されます。しかし、シミュレーターでの私の要求が Charles http トラフィック監視リストに表示されなかったという問題は何でしたか。
シミュレーターだからかなと思ったのですが、そうではありませんでした。サファリを開いていくつかのウェブページを閲覧してみましたが、すぐにトラフィックが現れました。したがって、問題はシミュレーターからではありませんでした。
私もデバイスにインストールしてみましたが、やはり同じ話で、HttpClient を使用すると、トラフィック監視画面は静かなままですが、ブラウザーを開くとすぐに、トラフィック画面が揺れ始め、すべての要求が横取りされます。
HTTPS を使用しているためと考えられますが、いずれにせよ、本文がエンコードされていても、少なくとも要求ヘッダーをキャプチャする必要があります。しかし、そうではありませんでした。デバイスのサファリで HTTPS サイトを開こうとしたところ、Charles の画面に再びトラフィックが表示されました。
次に、monotouch HttpClient sampleをダウンロードしました。幸いなことに、リクエストを送信する方法はいくつかありますが、実際にはそのうちの 4 つです。1. http WebRequest、2. https WebRequest、3. http NSUrlConnection、4. HttpClient です。
そして、最初の 3 つが charles に完全に表示されたと推測できるように、それらすべてを試しましたが、最後の HttpClient は、トラフィック ログ画面に表示されなかった理由がわかりません。
したがって、問題が HttpClient クラスであることは 100% 確信しています。これは、正常に動作している、つまり要求を送受信しているにもかかわらず、このクラスによって行われた要求を Charles がキャプチャできない理由がわかりません。 .
そして、この問題の最後の考えられる理由を除外するために、つまり、問題は Charles にある可能性があります。また、Mac で仮想マシンとして実行されていた Windows で Fiddler を使用してみました (ここでその方法を見つけることができます)。同じ話が繰り返されました - HttpClient によって行われたすべてのリクエストはキャプチャされず、残り (WebRequests、NSUrlConnection-s、サファリ Web ページの開始) は完全に正常に機能しました。
何らかのバグであるかどうかにかかわらず、この問題に対する回避策または他の解決策があるかもしれません。
返信ありがとうございます
よろしくガギク