Передать XML методом POST

ActiveX

Новичок
Передать XML методом POST

Пытаюсь передать такую XML:
<data>
<name>Name</name>
<sname>Sercond Name</sname>
<gender>Male</gender>
<address>
<first>First St, 15</first>
<second>Second Empty</second>
</address>
</data>
Методом POST (использую последнюю версию CURL) из одного скрипта (sendPOST.php) в другой (catchPOST.php) таким образом:
PHP:
<?php
/*
	Получение внешних данных.
	После переменные, используемые для заполнения XML 
	имеют опеределенные значения
*/
$Data = '
<data>
	<name>'.$Name.'</name>
	<sname>'.$sName.'</sname>
	<gender>'.$gender.'</gender>
	<address>
		<first>'.$address['first'].'</first>
		<second>.'$address['second'].'</second>
	</address>
</data>
';
$Data = urlencode($Data); 
$ch = curl_init("http://my_url/catchPOST.php"); 
curl_setopt($ch,CURLOPT_POST,1); //Использовать метод POST
curl_setopt($ch,CURLOPT_POSTFIELDS, $POST); //Отправить данные
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0); //
curl_setopt($ch, CURLOPT_HEADER,0);
$res = curl_exec($ch);
curl_close($ch);
if($res)
	echo "<h1>RESULT:</h1>";
	var_dump($res);
	echo "<hr />";
else
	echo "<h1>ERROR:</h1>curl_error($ch)<hr />";
?>
Файл catchPOST.php выглядит так:
PHP:
<?php
echo '<h1>Headers:</h1>';
var_dump(getallheaders());
echo "<hr /><h1>POST data:</h1>";
var_dump($_POST);
?>
Проблема в том, что данные не отправляются (не передаются) скрипту catchPOST.php, т.е. после отработки скрипта sendPOST.php на экран выдается (HTML-код):

<h1>RESULT</h1>
string(553) "HTTP/1.1 200 OK
Date: Thu, 31 Aug 2006 14:58:29 GMT
Server: Apache/1.3.31 (Win32) PHP/5.1.4
Cache-Control: max-age=5
Expires: Thu, 31 Aug 2006 14:58:34 GMT
X-Powered-By: PHP/5.1.4
Transfer-Encoding: chunked
Content-Type: text/html
<hr />
<h1>Headers:</h1>
array(5) {
["Accept"] => string(3) "*/*"
["Content-Length"] => string(1) "273"
["Content-Type"] => string(33) "application/x-www-form-urlencoded"
["Host"] => string(4) "test"
["User-Agent"] => string(34) "Opera/9.00 (Windows NT 5.1; U; ru)"
}
<hr />
<h1>POST:</h1>
array(0) {
}

Посему получается, что данные не передаются. Не понимаю, почему?
 

Frol

Новичок
ActiveX
зачем нас обманывать?
приведенное выше может быть действительно только при использовании черной магии.
 

ActiveX

Новичок
Frol
Вы это к чему/о чем?

-~{}~ 01.09.06 00:47:

chameleon,
PHP:
var_dump($HTTP_RAW_POST_DATA)
выдает NULL
 

Frol

Новичок
ActiveX
я уже вижу в твоем скрипте кучу ошибок, в том числе ошибок синтаксиса.
это означает, что код не реальный, а придуман.
тем самым, утверждая, что ты делаешь "таким образом", ты всех обманываешь.
 

dadoc

Новичок
Попробуй заменить вот это
PHP:
curl_setopt($ch,CURLOPT_POSTFIELDS, $POST); //Отправить данные
На

PHP:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/octet-stream'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $Data);
на клиенте должен появится $HTTP_RAW_POST_DATA...
 

Alexandre

PHPПенсионер
используй
php://input allows you to read raw POST data. It is a less memory intensive alternative to $HTTP_RAW_POST_DATA and does not need any special php.ini directives. php://input is not available with enctype="multipart/form-data".
Код:
$f=fopen("php://input",'r');
print fread($f,1024);
$fclose($f);
-~{}~ 01.09.06 14:45:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/octet-stream'));
curl_setopt($ch,CURLOPT_POSTFIELDS, $POST);
CURLOPT_POSTFIELDS: Строка, содержащая данные для HTTP POST запроса
CURLOPT_HTTPHEADER: Массив с HTTP заголовками, заголовок должен быть не application/x-www-form-urlencoded, либо Content-type: application/octet-streamб application/xml либо Content-type: text/xml (рекомендуется первый)
 

ActiveX

Новичок
Frol!
Кроме ошибок вставки значений переменных в XML других не нашел. А данные в XML, я действиетльно всятавляю другим более сложным способом. Здесь я решил вставить более простую версию кода без ущерба логической целостности :)

-~{}~ 02.09.06 02:02:

dadoc! Это просто гениально!
Похоже, что все работает!
Спасибо!
:)
 

Frol

Новичок
ActiveX
кажется, ты не понял.
лучше ничего не показывать, чем такие "более простые версии".
это так, на будущее.
 

Ekklipce

Новичок
Может AJAX использовать ?
есть там что то вроде модуля HTTPXMLRequest
 

kost

Новичок
ActiveX
Ежели нужно просто передать данные методом post используйте Snoopy. Проще и легче.
 

ActiveX

Новичок
kost, спасибо! Snoopy оказалась действительно отличной вещью!

-~{}~ 05.09.06 19:54:

Да, действительно ооочень интересная вещь!

Господа, а какими образом можно передать куки на сервер? Т.е. из свеого одного скрипта в свой другой помимо XML нужно передать cookie (например SID). В скрипте catchPOST.php я потом пытаюсь поймать $SID так:
PHP:
@import_request_variables("GPC");
extract($_SERVER);
var_dump($SID);
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
TiamaT
Вопросом парсинга, взлома, и прочей фигней тут никто не занимается, а ты именно этим и решил заняться, судя по коду. В таких вопросах тут никто не помогает.

PS: Если же я ошибся, то прошу прощения. Но пока складывается именно такое впечатление. Да и скрипт может проверять не только логин и пароль.
 
Сверху