Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

CURL POST params PHP

Нужно передать POST-ом некоторые параметры на определённый url. Для тестирование, я отправляю на свой action. Вот такой код:
$url = 'https://mysite/payboutique/paymentResult'; $xml_data = 'some data'; $data = array('xml' => urlencode($xml_data));
$headers = array( 'Content-type: text/xml', 'Content-length: '.strlen($xml_data), );
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch);
В соответственном action я написал такой код:
$xml = Arr::get($_POST, 'xml', ''); Log::instance()->add(Log::NOTICE, 'Post:'.$xml); $xml = Arr::get($_GET, 'xml', ''); Log::instance()->add(Log::NOTICE, 'Get:'.$xml); Log::instance()->add(Log::NOTICE, implode("|",$_POST));
Посмотрел по логам, а ничего не пришло? Как вы поняли, мне нужно передать постом параметр с именем "xml". Что я не так сделал?
В логах:
2015-07-22 10:26:29 --- NOTICE: Post: in /.../system/classes/Kohana/Controller.php:84 2015-07-22 10:26:29 --- NOTICE: Get: in /.../system/classes/Kohana/Controller.php:84 2015-07-22 10:26:29 --- NOTICE: in /.../system/classes/Kohana/Controller.php:84


Ответ

Если вы хотите отправить с запросом POST параметры, вам нужен не Content-type: text/xml, а Content-type: application/x-www-form-urlencoded. Этот заголовок устанавливается самим CURL'ом автом-ки, если вы передадите в CURLOPT_POSTFIELDS url-encoded строку (для этого нужно вызвать функцию http_build_query). Так что вам не нужно вручную передавать HTTP заголовки, оставьте это CURL'у.
И читайте мануалы, в конце концов.

Комментариев нет:

Отправить комментарий