Нужно передать 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'у.
И читайте мануалы, в конце концов.
Комментариев нет:
Отправить комментарий