Показать сообщение отдельно
  #1 (permalink)  
Старый 06.04.2012, 23:34
Новичок на форуме
Отправить личное сообщение для AxaRu Посмотреть профиль Найти все сообщения от AxaRu
 
Регистрация: 06.04.2012
Сообщений: 1

Помогите сделать запрос к transmission
Коллеги, никогда не программировал на 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

Последний раз редактировалось AxaRu, 07.04.2012 в 13:25.
Ответить с цитированием