Обработка json POST
Модератор: immortal
-
- Сообщения: 2109
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 316 раз
- Поблагодарили: 466 раз
Re: Обработка json POST
https://snipp.ru/php/curl#link-post-zapros
curl_setopt($ch, CURLOPT_HEADER, false);
заголовки не отключены и выдает их вместо нужного, но вообще при вопросе показывали б и ваши ответы ...
curl_setopt($ch, CURLOPT_HEADER, false);
заголовки не отключены и выдает их вместо нужного, но вообще при вопросе показывали б и ваши ответы ...
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
-
- Сообщения: 43
- Зарегистрирован: Пн ноя 10, 2014 1:52 pm
- Благодарил (а): 14 раз
- Поблагодарили: 1 раз
Re: Обработка json POST
Скрипт из примера https://snipp.ru/php/curl#link-post-zapros написал вот так и вставил в свой php
При вызове его из сценария выдает результат "{\"sequence\":\"1742028997742\",\"seq\":27,\"error\":400,\"encrypt\":true}"
В Charles показывает
title 1
category_id 0
description
code_code_type 0
xml
add_device_id 0
code $data = array(
'sequence' => '1742028997742',
'deviceid' => '10022b943a',
'selfApikey' => '88361d6a-74b0-4241-8965-a9b25d3b17f8',
'iv' => 'NjAzMjk2NjM2MzcwNjk0NA==',
'encrypt' => true,
'data' => 'R9jey0dlgbLaU58wNhJHZ2bQ9rtN1wFv8S5vDYnOMhFKOJYmhQQqmriL8OSaJFUx',
);
$ch = curl_init('http://192.168.0.118:8081/zeroconf/switches/');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
$res = json_encode($res, JSON_UNESCAPED_UNICODE);
print_r($res);
edit_run 1
run_hours 00
run_minutes 00
subm Сохранить
id 65
view_mode edit_scripts
edit_mode
mode update
pd cGFuZWw6e2FjdGlvbj1zY3JpcHRzfQ%3D%3Dpz_
md scripts
inst adm
И снова ничего не происходит
Простите, если излагаю невнятно, из меня программер как из г.. пуля ((
Код: Выделить всё
<?php
$url = 'http://192.168.0.118:8081/zeroconf/switches';
$headers = ['Content-Type: application/json']; // заголовки нашего запроса
$post_data = [ // поля нашего запроса
'sequence' => '1742028997742',
'deviceid' => '10022b943a',
'selfApikey' => '88361d6a-74b0-4241-8965-a9b25d3b17f8',
'iv' => 'NjAzMjk2NjM2MzcwNjk0NA==',
'encrypt' => true,
'data' => 'R9jey0dlgbLaU58wNhJHZ2bQ9rtN1wFv8S5vDYnOMhFKOJYmhQQqmriL8OSaJFUx',
];
$data_json = json_encode($post_data); // переводим поля в формат JSON
$curl = curl_init();
// curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
$result = curl_exec($curl); // результат POST запроса
?>
В Charles показывает
title 1
category_id 0
description
code_code_type 0
xml
add_device_id 0
code $data = array(
'sequence' => '1742028997742',
'deviceid' => '10022b943a',
'selfApikey' => '88361d6a-74b0-4241-8965-a9b25d3b17f8',
'iv' => 'NjAzMjk2NjM2MzcwNjk0NA==',
'encrypt' => true,
'data' => 'R9jey0dlgbLaU58wNhJHZ2bQ9rtN1wFv8S5vDYnOMhFKOJYmhQQqmriL8OSaJFUx',
);
$ch = curl_init('http://192.168.0.118:8081/zeroconf/switches/');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
$res = json_encode($res, JSON_UNESCAPED_UNICODE);
print_r($res);
edit_run 1
run_hours 00
run_minutes 00
subm Сохранить
id 65
view_mode edit_scripts
edit_mode
mode update
pd cGFuZWw6e2FjdGlvbj1zY3JpcHRzfQ%3D%3Dpz_
md scripts
inst adm
И снова ничего не происходит
Простите, если излагаю невнятно, из меня программер как из г.. пуля ((
-
- Сообщения: 2109
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 316 раз
- Поблагодарили: 466 раз
Re: Обработка json POST
error:400
судя по этому, косяк в вашем запросе какой-то
судя по этому, косяк в вашем запросе какой-то
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
-
- Сообщения: 296
- Зарегистрирован: Сб май 11, 2019 6:35 pm
- Откуда: Иркутск
- Благодарил (а): 16 раз
- Поблагодарили: 68 раз
Re: Обработка json POST
А если так
Если также выдаст "{\"sequence\":\"1742028997742\",\"seq\":27,\"error\":400,\"encrypt\":true}", то проверяйте запрос/
Вот что говорит Нейропоиск Яндекса по этому поводу:
"Ошибка 400 в Sonoff может возникать при отправке запроса с неправильным значением параметра «switch».
Чтобы настроить яркость света, он должен быть включён, поэтому при отправке запроса с «switch»: «off» будет сообщено об ошибке «400» как о неудачной операции."
А вот что говорит документация: - 400: The operation failed and the request was formatted incorrectly. The request body is not a valid JSON format.
Если честно, смущает 'encrypt' => true. Я так понимаю, это тупо скопированный с eWelink запрос. Я бы посоветовал разобраться с протоколом и отправлять запросы без шифрования. Вот тут подробнейшее описание:
https://sonoff.tech/diy-developer/
Код: Выделить всё
<?php
$url = 'http://192.168.0.118:8081/zeroconf/switches';
$post_data = [ // поля нашего запроса
'sequence' => '1742028997742',
'deviceid' => '10022b943a',
'selfApikey' => '88361d6a-74b0-4241-8965-a9b25d3b17f8',
'iv' => 'NjAzMjk2NjM2MzcwNjk0NA==',
'encrypt' => true,
'data' => 'R9jey0dlgbLaU58wNhJHZ2bQ9rtN1wFv8S5vDYnOMhFKOJYmhQQqmriL8OSaJFUx',
];
$data_json = json_encode($post_data); // переводим поля в формат JSON
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, Array('Content-Type: application/json;charset=UTF-8'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json);
$result = curl_exec($curl); // результат POST запроса
print_r($result);
?>
Вот что говорит Нейропоиск Яндекса по этому поводу:
"Ошибка 400 в Sonoff может возникать при отправке запроса с неправильным значением параметра «switch».
Чтобы настроить яркость света, он должен быть включён, поэтому при отправке запроса с «switch»: «off» будет сообщено об ошибке «400» как о неудачной операции."
А вот что говорит документация: - 400: The operation failed and the request was formatted incorrectly. The request body is not a valid JSON format.
Если честно, смущает 'encrypt' => true. Я так понимаю, это тупо скопированный с eWelink запрос. Я бы посоветовал разобраться с протоколом и отправлять запросы без шифрования. Вот тут подробнейшее описание:
https://sonoff.tech/diy-developer/
- Рейтинг: 1.16%
-
- Сообщения: 108
- Зарегистрирован: Ср янв 09, 2019 8:37 pm
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Обработка json POST
Чудес не бывает. Поставьте какой-нибудь fiddler/tcpdump/wireshark/что там ещё сейчас актуально и сравните, что отправляется из Хрома и что из php.
https://confluence.atlassian.com/kb/how ... 64332.html
https://confluence.atlassian.com/kb/how ... 64332.html
- За это сообщение автора JackOfShadows поблагодарил:
- John (Ср мар 19, 2025 1:18 pm)
- Рейтинг: 1.16%
-
- Сообщения: 43
- Зарегистрирован: Пн ноя 10, 2014 1:52 pm
- Благодарил (а): 14 раз
- Поблагодарили: 1 раз
Re: Обработка json POST
Уважаемые форумчане! Огромное спасибо за ответы и рекомендации!
Победил я эту заразу, оказывается нужно было еще передавать значение "Accept" без него девайс отказывался принимать запрос в нужном виде.
Вот итог, может кому пригодится:
Оборудование Sonoff Dual R3, поля запроса отловлены с помощью Charles и Wireshark
Создаем два сценария на вкл и на выкл, наверняка можно и в одном все условия прописать, но мои познания тут закончились ))
Для полного счастья еще нужно будет обновлять статус объекта (вкл/выкл), но пока и так сойдет ))))
Победил я эту заразу, оказывается нужно было еще передавать значение "Accept" без него девайс отказывался принимать запрос в нужном виде.
Вот итог, может кому пригодится:
Оборудование Sonoff Dual R3, поля запроса отловлены с помощью Charles и Wireshark
Создаем два сценария на вкл и на выкл, наверняка можно и в одном все условия прописать, но мои познания тут закончились ))
Код: Выделить всё
$url = 'IP адрес устройства';
$headers = ['Content-Type: application/json; charset=utf-8']; // заголовки нашего запроса
$post_data = [ // поля нашего запроса
'sequence' => 'ловим значение в Charles',
'deviceid' => 'ловим значение в Charles',
'selfApikey' => 'ловим значение в Charles',
'iv' => 'ловим значение в Charles',
'encrypt' => true,
'data' => 'ловим значение в Charles',
];
$data_json = json_encode($post_data); // переводим поля в формат JSON
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, array (
"Accept: application/json",
"Content-Type: application/json"
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
$result = curl_exec($curl); // результат POST запроса
- За это сообщение автора John поблагодарил:
- JackOfShadows (Ср мар 19, 2025 1:12 pm)
- Рейтинг: 1.16%
-
- Сообщения: 296
- Зарегистрирован: Сб май 11, 2019 6:35 pm
- Откуда: Иркутск
- Благодарил (а): 16 раз
- Поблагодарили: 68 раз
Re: Обработка json POST
Всё-таки я не понимаю, зачем заниматься реверс-инжинирингом, если есть подробнейшее описание API? Там же прямо конкретные запросы прописаны...
-
- Сообщения: 108
- Зарегистрирован: Ср янв 09, 2019 8:37 pm
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Обработка json POST
Можно ссылку, где написано про accept?
-
- Сообщения: 296
- Зарегистрирован: Сб май 11, 2019 6:35 pm
- Откуда: Иркутск
- Благодарил (а): 16 раз
- Поблагодарили: 68 раз
Re: Обработка json POST
Ссылку я давал выше. А то, что скопировано с общения приложения с устройством - это немного другое. И шифрование и accept. А вообще, предлагаю самостоятельно изучить протокол. Я его не изучал и не могу рассказать, как он работает, но явно проще, чем отправлять непонятные строки устройству...