Может кто-нибудь выяснить, что случилось с моей PHP скрипт? Клиент использует RPC завиток, чтобы сделать запрос HTTP. Выходной экран:
Исключение: Некорректный идентификатор ответа (запрос ID: 1, ответ ID: <) В C: \ WAMP \ WWW \ curlsome.php на линии 149
SCRIPT КОД:
PHP
require_once 'curlsome.php';
$ Bitcoin = новый jsonRPCClient (»HTTP: // локальный: 18332», 'User1', 'password1');
эхо "<до>\ п";
print_r ($ bitcoin->получить данные()); эхо "\ п";
эхо " предварительно>";
?>
КЛИЕНТ КОД:
класс jsonRPCClient {
/ **
* Debug состояние
*
* @var булево
* /
частные $ отлаживать;
/ **
* URL-адрес сервера
*
* @var строка
* /
частный $ URL;
/ **
* Запрос идентификатор
*
* @var целое
* /
частный $ ID;
/ **
* Если это правда, уведомления выполняются вместо запросов
*
* @var булево
* /
частное $ уведомление = ложь;
/ **
* Принимает параметры соединения
*
* @param строка $ URL
* @param булева $ отлаживать
* /
общественная функция __construct ($ URL, $ отлаживать = ложь) {
// URL сервера
$ this->URL = $ URL;
// прокси
пусто ($ прокси)? $ this->прокси = '': $ this->прокси = $ прокси;
// состояние отладки
пусто ($ отлаживать)? $ this->отлаживать = ложь: $ this->отлаживать = истина;
// Идентификатор сообщения
$ this->ID = 1;
}
/ **
* Устанавливает состояние уведомления объекта. В этом состоянии, уведомления выполняются, вместо запросов.
*
* @param булева $ уведомление
* /
общественная функция setRPCNotification ($ уведомлений) {
пусто ($ уведомление)?
$ this->уведомление = ложь
:
$ this->уведомление = True;
}
/ **
* Выполняет запрос jsonRCP и получает результаты в виде массива
*
* @param строка $ метод
* @param массив $ PARAMS
* @return массив
* /
общественная функция __call (метод $, $ PARAMS) {
// проверить
если (! is_scalar ($ метод)) {
проливают новый Exception ( «имя метода не имеет значения скалярной»);
}
// проверить
если (is_array ($ PARAMS)) {
нет // нет ключей
$ PARAMS = array_values ($ PARAMS);
} Еще {
проливают новый Exception ( «Params должны быть предоставлены в виде массива»);
}
// устанавливает уведомление или запрос задачи
если ($ this->уведомление) {
$ CurrentId = NULL;
} Еще {
$ CurrentId = $ this->Я бы;
}
// готовит запрос
$ Запрос = массив (
«Метод» => $ Метод,
'PARAMS' => $ PARAMS,
«Идентификатор» => $ currentId
);
$ Запрос = json_encode ($ запроса);
$ this->отлаживать && $ this->отладки. = '***** ***** Request'."\ п". $ Запрос."\ п". "***** Конец запроса *****."\ П \ п";
// выполняет POST HTTP
$ КЛЮЧ = массив ( 'HTTP' => массив (
«Метод» => 'ПОСЛЕ',
«Заголовок» => 'Content-тип: / JSON',
«Содержание» => $ запрос
));
$ Контекст = stream_context_create ($ КЛЮЧ);
если ($ Fp = Еореп ($ this->URL, 'г', ложь, $ контекст)) {
$ Ответ = '';
в то время как ($ строка = fgets ($ FP)) {
$ Ответ. = Обрезки ($ строка)."\ п";
}
$ this->отлаживать && $ this->отладки. = '***** ответ сервера *****."\ п". $ Ответ. ***** Конец ответа сервера *****."\ п";
$ Ответ = json_decode ($ ответ, правда);
} Еще {
проливают новый Exception ( «Не удается подключиться к». $ this->URL);
}
// отладочный вывод
если ($ this->отладки) {
эхо nl2br ($ отлаживать);
}
// окончательные проверки и возврат
если (! $ this->уведомление) {
// проверить
если ($ ответ [ 'ID']! = $ currentId) {
проливают новый Exception ( 'Неверный идентификатор ответа (идентификатор запроса:' $ currentId 'идентификатор ответа:' $ ответ [ 'ID'] ')'....);
}
если (! is_null ($ ответ [ 'ошибка'])) {
проливают новый Exception ( 'Request ошибку:' $ ответа [ 'ошибки'].);
}
возвращение $ ответ [ 'результат'];
} Еще {
возвращает истину;
}
}
}
?>
Большое спасибо,
Backedbit