Доброго дня форумчане, помогите написать скрип для отправки данных методом post на рhp во вложение скрин postman
Наработок нет, мне раздел покажи пример остальное я сделаю по образу и подобию. Раньше с другими api обычно отправляется Content-Type: application/JSON а тут надо "Content-Type: multipart/form-data", мне бы пример остальное все одинаково будет, только разные запросы PHP: <?php $curl = curl_init(); $message=array("cmd"=>"accounts", "token"=>"11111111111"); //echo "\r\n"; curl_setopt_array($curl, array( CURLOPT_URL => "url", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => json_encode($message), CURLOPT_HTTPHEADER => array( "Cache-Control: no-cache", "Content-Type: application/JSON" ) )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { //echo "cURL Error #:" . $err; } else { echo $response; ?>
CURL сам сделает multipart/form-data, если вы будете передавать в POSTFIELDS массив (ассоциативный). --- Добавлено --- Испортил вас JSON. Не знаете основ.
@ADSoft, $message в начале показан. --- Добавлено --- И чЁ? Я написал, как это в общем работает. Если у вас не работает, значит, причина в чем-то другом! --- Добавлено --- Свой Content-Type уберите! Возможно, заработает.
в руководстве написано данные при POST запросе необходимо передавать в Body где это body прописывается, в постман понятно поставил галочки все работает PHP: <?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "url", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => array("cmd"=>"accounts", "token"=>"3d3333a2-f4c9-403a-acb5-56d855b46e71"), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { //echo "cURL Error #:" . $err; } else { echo $response; } ?>
PHP: protected function stream( string $link, array $data, string $request ): array { //$m = microtime ( true ); $curl = curl_init (); curl_setopt_array ( $curl, [ CURLOPT_URL => $link, CURLOPT_POSTFIELDS => json_encode ( $data ), CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_CUSTOMREQUEST => $request, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'X-Leeloo-AuthToken: ' . $this -> getData( 'leeloo.token' ), ], CURLOPT_POST => true, CURLOPT_TIMEOUT => 5, CURLOPT_AUTOREFERER => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, ] ); // string(42) "Too many requests, please try again later." $response = curl_exec ( $curl ); curl_close ( $curl ); //echo 'CURL_INIT - ' . ( microtime ( true ) - $m ) . PHP_EOL; return json_decode ( ( string ) $response, true ) ?? [ 'response' => $response ]; }
Так тяжело набрать в гугле Код (Text): php CURLOPT_POSTFIELDS PHP: CURLOPT_POSTFIELDS => http_build_query($data), А что там у Вас в $request, ведомо только Вам.
если зададутся вопросом почему PHP: CURLOPT_POSTFIELDS => http_build_query($data), или PHP: CURLOPT_POSTFIELDS => json_encode ( $data ), https://stackoverflow.com/questions/5224790/curl-post-format-for-curlopt-postfields
всем спасибо с проблемой разобрался, 1. "Content-Type: application/x-www-form-urlencoded" а не Content-Type: multipart/form-data (дезинформация от разработчика) 2. url должен был быть https а не http (в личном кабинете адрес сервера запросов указан http, косяк разработчика)
Это для URL-кодировки, а ТС просил multipart/form-data. Оно может быть пофиг, как это часто бывает. А разрабы указывают multipart/form-data как более вменяемую в общем случае.
все таки основная причина была https, c http ответ от сервера не приходил вообще, завтра попробую multipart/form-data поставить, в общем я немного познакомился с api itoolabs, что то я тупанул можно было ссылку давно отправить http://wiki.itoolabs.com/rest_api, у них даже wiki http стоит