2017-02-23 3 views
2

wikispacesページを解析しようとしていますが、実際のページを取得できません。私はそのHttpClientのバグか何かが欠落しているかどうかはわかりません。AllowAutoRedirect = trueの場合でもHttpClientはリダイレクトされません。

これは私のコードです:

HttpClientHandler handler = new HttpClientHandler(); 
handler.AllowAutoRedirect = true; 
_httpClient = new HttpClient(handler); 

HttpResponseMessage response = await _httpClient 
    .GetAsync("http://medivia.wikispaces.com/Monsters"); 

私はそのコードを実行すると、私はのStatusCode 302を取得し、https://session.wikispaces.com/1/auth/auth?authToken=tokenに送信されます。私はAllowAutoRedirect = trueを持っているので、HttpClientが302に従うと期待しています。

この問題が発生したのは初めてです。それはRestSharpの一部であるPostmanとRestClientでうまく動作します。

+0

なぜ「WebClient」を使用しないのですか? –

+1

私は理解しているかどうか分かりませんが、リダイレクトに従わない場合は、単純に '' 'handler.AllowAutoRedirect = false;' 'を設定することができます。 – giubueno

+0

@LeiYang' WebClient'は古く、厄介な、痛い死を死ぬ! – DavidG

答えて

3

HttpClientが適切にリダイレクトしない理由は、サイトがHTTPSにリダイレクトしてからHTTPに戻ってくるためです。クイックフィックスは、とにかく良いアイデアである、代わりにhttps://medivia.wikispaces.com/Monstersを得ることです:

HttpResponseMessage response = await _httpClient.GetAsync("https://medivia.wikispaces.com/Monsters"); 
// Works fine! :) 

それが最初のように動作しなかった理由私は興味があったので、私は少し深く掘りました。

GET http://medivia.wikispaces.com/Monsters 
302 https://session.wikispaces.com/1/auth/auth?authToken=token 
302 http://medivia.wikispaces.com/Monsters?redirectToken=token 

HttpClientHandlerは、自動的に次のことを停止する原因となっている暗号化されていないものに、暗号化(HTTPS)接続から302ということ:あなたがブラウザまたはネットワーククライアントでネットワークトレースを見れば、これは何が起こるかです。私の言うことは、Unix oneは私の非公式テストでHTTPS-> HTTPリダイレクトを気にしていないようだから、これはWindows implementation of HttpClientHandlerのセキュリティの奇抜です。

+0

素敵なことを知っていても、それは事実感謝でした! – Diego

関連する問題