4

WebAPIを使用してuTorrentからトレントのリストを取得しようとしています。必要なトークンの取得はOKです:

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&token = 3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA」が正常に開きますが、変数のない同じリンクを持つC#ではエラー400が発生します。トークン認証をオフにすると、WebClientはページを完全にロードする場合としない場合があります

"&token=3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA"

ただし、トークン認証はデフォルトで有効になっているため、私のアプリやすべてのアプリで使用する必要があります。そして、はい、WebRequest/HttpWebRequestも役に立ちませんでした。

PS私の英語は申し訳ありませんが、私はそれを正しく機能させることができませんでした

4

3 に答える 3

7

リクエストからCookieを保存する必要があります

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をサポートしていないため、次のリンク(WebClientクラスでのCookieContainerの使用)にアクセスしてください。

于 2011-08-17T14:26:22.453 に答える
1

リクエストからCookieを保存する必要があります

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;
于 2011-08-16T04:39:52.540 に答える
0

私は簡単な3ステップの提案があります:

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

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

  3. ブラウザのHTTPリクエストとレスポンスをC#アプリのリクエストとレスポンスと比較します。大きな違いが見られる場合は、問題である可能性が高いです。

于 2011-08-15T18:36:29.120 に答える