<?php
class transmission {
public $url;
public $user;
public $pass;
public $session_id = '';
public $header = array(
//'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0',
'Connection: keep-alive'
);
public function __construct($url, $user, $pass) {
$this->url = $url;
$this->user = $user;
$this->pass = $pass;
$this->request();
}
function request($post = "") {
//echo $url.PHP_EOL;
$url = $this->url;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_MAXREDIRS, 5);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
$header = $this->header;
if ($this->session_id) {
$header[] = 'X-Transmission-Session-Id: '.$this->session_id;
}
$header[] = "Authorization: Basic ".base64_encode($this->user.':'.$this->pass);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
if ($post) {
echo $post.PHP_EOL;
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
}
$data = curl_exec($curl);
$code = curl_getinfo($curl)["http_code"];
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
//var_dump(curl_getinfo($curl));
curl_close($curl);
$header = substr($data, 0, $header_size);
$body = substr($data, $header_size);
//var_dump($header);
//var_dump($body);
if ($code == 409 && preg_match('/<code>X-Transmission-Session-Id: (.*?)<\/code>/', $data, $mh)) {
$this->session_id = $mh[1];
} elseif ($code == 401) {
die("Authorization error".PHP_EOL);
} elseif ($code == 200) {
return json_decode($body, 1);
}
}
function build_request($method, $arguments) {
$post_data = json_encode(array('method' => $method, 'arguments' => $arguments));
return $this->request($post_data);
}
public function get($ids = null, $fields = null) {
$fields = $fields ? $fields : array( "id", "name", "status", "doneDate", "haveValid", "totalSize", "trackers", "uploadLimited", "uploadLimit");
$arguments = $ids ? array("fields" => $fields, "ids" => $ids) : array("fields" => $fields);
return $this->build_request( "torrent-get", $arguments );
}
public function reannounce($ids = null) {
$arguments = $ids ? array("ids" => $ids) : array();
return $this->build_request( "torrent-reannounce", $arguments);
}
}
/*
$rpc = new transmission("http://192.168.168.6:9091/transmission/rpc", "admin", "pass");
$data = $rpc->get(array(1), array('id'));
//$data = $rpc->get();
$data = $rpc->reannounce();
var_dump($data);
*/
更多参数:
https://github.com/transmission/transmission/blob/master/extras/rpc-spec.txt