Коллеги, никогда не программировал на javascript
и ajax.
Сейчас изучаю эти технологии.
Есть задача послать запрос на сервер torrent transmission, но застопорилось все с пониманием как сформировать запрос.
Итак, есть сервер с url
http://192.168.1.1:8181/transmission/rpc.
Я хочу отправить запрос для получения состояния торрентов.
JSON запроса выглядит так:
{"method":"session-stats"}
Кроме того нужно передать идентификатор сессии вот такого вида:
"X-Transmission-Session-Id: mnTDXReMBc3PkAa1flYVbHmoAVfq1UmNiFe6uW1aC9Q4TXD4"
Таким образом, я должен открыть сессию как то так:
var xhr = new XMLHttpRequest();
xhr.open('GET','http://192.168.1.65:8181/transmission/rpc', 'true', 'admin','password1');
xhr.send();
А как передать запрос и идентификатор не понимаю.
Если не трудно помогите разобраться с принципом.
С уважением, Алексей.
PS. Я на bash написал работающий макет программы.
Код:
|
#!/bin/bash
#-----------------------------------------------------------------------
# Все запросы выполняются в две попытки
# Если после первой попытки выдается <h1>409: Conflict</h1> ...
# то из ответа считывается новый идентификатор сессии XTSID
# и делается еще один запрос.
# https://trac.transmissionbt.com/browser/trunk/extras/rpc-spec.txt#L48
# 2.3.1. CSRF Protection
#
DEBUG=0
HOST="192.168.1.65"
PORT="8181"
TRURL="http://$HOST:$PORT/transmission/rpc"
USER="admin"
PASSWORD="password1"
XTSID=""
#-------------------------------------
# Функция возвращает ID сессии
#
function getSID ()
{
local S="$1"
S=${S##*X-Transmission-Session-Id: }
S=${S%%</code>*}
echo $S
}
#-------------------------------------
# Функция получения ответа от сервера transmission
# параметр $1 - JSON запрос
function getData ()
{
local REQUEST="$1"
local RET=$(curl --silent -H "X-Transmission-Session-Id: $XTSID" \
-H "Content-type: application/json" \
-X POST \
-d "$REQUEST" \
--user $USER:$PASSWORD $TRURL)
((DEBUG)) && echo $XTSID
# проверяем на "409: Conflict"
if [[ "$RET" =~ "409: Conflict" ]]
then
XTSID=$(getSID "$RET")
((DEBUG)) && echo "XTSID $XTSID"
RET=$(curl --silent -H "X-Transmission-Session-Id: $XTSID" \
-H "Content-type: application/json" \
-X POST \
-d "$REQUEST" \
--user $USER:$PASSWORD $TRURL)
fi
echo $RET
}
#-------------------------------------
# Запрос общей статистики сесии с transmission
R='{"method":"session-stats"}'
RET=$(getData "$R")
echo $RET |