调用Real-Debrid API添加Torrent返回Bad Request,求代码排查
问题排查与修复建议
你的代码存在几个明显问题,导致出现Bad Request响应,逐一说明并给出修复方案:
请求方法错误
Real-Debrid的/torrents/addTorrent接口要求使用POST请求,而非你代码里的PutAsync,需将请求方法改为PostAsync。缺少认证头
Real-Debrid所有API接口都需要携带Authorization认证头,格式为Bearer {你的API令牌}。必须在请求中添加该头信息,示例:
this.httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "你的API令牌");
- 错误处理不完善
仅打印状态码无法定位具体问题,Real-Debrid会在错误响应中返回详细描述,需读取响应内容:
else { string errorBody = await response.Content.ReadAsStringAsync(); Console.WriteLine($"Error: {response.StatusCode} - {errorBody}"); }
- 可选:文件读取优化
使用File.ReadAllBytes会将整个torrent文件加载到内存,大文件场景下效率较低,可改用StreamContent:
var fileContent = new StreamContent(File.OpenRead(filePath));
修复后的完整代码示例:
public async Task AddTorrent2(string filePath) { if (!File.Exists(filePath)) { throw new FileNotFoundException("File not found", filePath); } // 添加认证头,替换为你的Real-Debrid API令牌 this.httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "你的API令牌"); var requestContent = new MultipartFormDataContent(); var fileContent = new StreamContent(File.OpenRead(filePath)); fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-bittorrent"); requestContent.Add(fileContent, "file", Path.GetFileName(filePath)); var apiUrl = "https://api.real-debrid.com/rest/1.0/torrents/addTorrent"; var response = await this.httpClient.PostAsync(apiUrl, requestContent); if (response.IsSuccessStatusCode) { string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine("Success! Response: " + responseBody); } else { string errorBody = await response.Content.ReadAsStringAsync(); Console.WriteLine($"Error: {response.StatusCode} - {errorBody}"); } }
注意:请将代码中的你的API令牌替换为你在Real-Debrid账户中生成的有效API令牌,令牌可在账户设置的API板块获取。
内容的提问来源于stack exchange,提问作者GKonheiser
相关产品推荐
相关产品推荐

