连接到json-rpc接口
Posted
技术标签:
【中文标题】连接到json-rpc接口【英文标题】:Connect to json-rpc interface 【发布时间】:2014-11-04 12:06:20 【问题描述】:我正在尝试通过 C#/Java 连接到传输 rpc 接口以获取一些信息。 https://trac.transmissionbt.com/browser/trunk/extras/rpc-spec.txt 不幸的是,我无法获得正确的 HTTP-Post 来访问该界面。 例如,如果我在 C# 中尝试这个:
using (var client = new WebClient())
var values = new NameValueCollection();
values["torrent-get"] = "id";
var response = client.UploadValues("http://ip:9091/transmission/rpc", values);
var responseString = Encoding.Default.GetString(response);
Console.WriteLine("" + responseString);
或者如果我使用:
using (var webClient = new WebClient())
String json = "\"arguments\": \"fields\": [ \"id\", \"name\", \"totalSize\" ],\"ids\": [ 7, 10 ],\"method\": \"torrent-get\",\"tag\": 39693";
var response = webClient.UploadString("http://192.168.240.171:9091/transmission/rpc", "POST", json);
Console.WriteLine(""+response);
我收到以下错误:
System.dll 中出现“System.Net.WebException”类型的未处理异常 附加信息:远程服务器返回异常:(409) 冲突。
【问题讨论】:
【参考方案1】:您必须保存 409 响应中提供的 X-Transmission-Session-Id 并重新提交请求,并将 X-Transmission-Session-Id 属性添加到您的请求标头。
java 中的示例:
int index = responseString.indexOf("X-Transmission-Session-Id:");
String sessionId = responseString.substring(index + 27, index + 75);
connection.setRequestProperty("X-Transmission-Session-Id", sessionId);
【讨论】:
以上是关于连接到json-rpc接口的主要内容,如果未能解决你的问题,请参考以下文章
“连接被远程接口拒绝”使用 PDO 连接到 Firebird 3