2011-08-15 23 views
3

私はuTorrentから急流のリストをWeb APIを使って取得しようとしています。必要なトークンがO.Kを行く:.NET経由でuTorrent Web APIを使用する

WebClient client = new WebClient() { Credentials = new NetworkCredential(UserName, pass) }; 
StreamReader Reader = new StreamReader(client.OpenRead("http://localhost:" + port + "/gui/token.html")); 
string token = Reader.ReadToEnd(); 
token = token.Split('>')[2].Split('<')[0]; 
// token is now something like 3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA 

取得しかし、私は急流のリストを取得するためにそれを使用しようとすると:

Reader = new StreamReader(client.OpenRead("http://localhost:" + port + "/gui/?list=1&token=" + token)); 

を私が得るすべては、「400不正な要求をエラー」です。

トークンを手動で取得しようとしました。ブラウザのページで "http:// localhost:30303/gui /?list = 1 &トークン= 3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA"が開きますが、C#では変数がなくても同じエラーが表示されますが、まだエラーは発生していません。 興味深い部分はあること、であり、デフォルトで有効になって

"&token=3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA" 

が、トークン認証なしで完全にトークン認証Webクライアントの負荷のページをオフにした場合ので、私と任意のアプリがそれを使用する必要があります。 はい、WebRequest/HttpWebRequestも役に立ちませんでした。

P.S.私の英語のため申し訳ありませんが、私はそれを動作させることができなかった右

+0

おそらくエンコードの問題です。 –

答えて

6

あなたからクッキーを保存する必要が要求は

Classes.CookieAwareWebClient client = new Classes.CookieAwareWebClient() { Credentials = new NetworkCredential("shehab", "shehab") }; 
StreamReader Reader = new StreamReader(client.OpenRead("http://localhost:" + "8080" + "/gui/token.html")); 
string token = HtmlRemoval.StripTagsRegexCompiled(Reader.ReadToEnd()); 
MessageBox.Show(token); 

Reader = new StreamReader(client.OpenRead("http://localhost:" + "8080" + "/gui/?list=1&token=" + token)); 
MessageBox.Show(Reader.ReadToEnd()); 

、Cookie対応クラスの場合は、WebクライアントがCookieをサポートしていないため、次のリンク(Using CookieContainer with WebClient class)に移動します。

0

私はシンプルな3ステップの提案があります。

  1. あなたがトークンでブラウザを使用する場合は、HTTPトラフィックを分析するためにFiddler2を使用しますサーバーとブラウザーの間。

  2. C#アプリケーションを開き、Fiddler2を使用してサーバーとアプリケーション間のHTTPトラフィックを分析します。

  3. ブラウザのHTTP要求と応答を、C#アプリケーションの要求と応答と比較します。大きな違いが見られる場合は、問題になる可能性があります。

+0

私は試しました。私は頑張った。 WebClientやWebRequestの変更フィールドSet-CookieやOpera(私が使用している)のようには見えません。私は明日この方向を確認します。ありがとうたくさん – MadRunner

+0

私は、設定されたクッキーのフィールドは、サーバーからの応答の一部だと思います。サーバーがWebClientでCookieを設定する必要がある場合、WebClientは将来のすべてのHTTP要求でCookieを返す必要があります。それは可能ですか? – Phil

+0

ありがとう、それです、私は問題を見つけた! – MadRunner

1

あなたは要求

WebRequest request = WebRequest.Create("http://localhost:" + port + "/gui/token.html"); 
CookieContainer cookies = new CookieContainer(); 
(request as HttpWebRequest).CookieContainer = cookies; 

からクッキーを保存し、同じトークンを使用している場合uTorrentのに他のすべてのリクエストでそれを使用する必要があります。

request = WebRequest.Create("http://localhost:" + port + "/gui/?list=1&token=" + token); 
(request as HttpWebRequest).CookieContainer = cookies; 
関連する問題