Php Curl HTTP POST REQUEST устанавливает настраиваемый заголовок с вложенными парами значений ключа

Как установить этот заголовок в php с помощью Curl? (Элемент CustomInfo – это массив (пары вложенных ключей), а элемент AuthenticationInfo – массив (пара вложенных ключей))

<xml bla bla...> <Header> <CustomInfo> <IsTestMessage>true</IsTestMessage> <IsContentCompressed>false</IsContentCompressed> </CustomInfo> <AuthenticationInfo> <ApplicationId>SomeId</ApplicationId> <VersionId>0.9</VersionId> <RelationId></RelationId> <UserId>SomeUserId</UserId> <Password>SomePassword</Password> </AuthenticationInfo> </Header> <Body> <!--etc...(actual xml)--> </Body> </xml bla bla...> 

Обычно я бы сделал:

 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.example.com/process.php"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,$vars); //Body curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $headers = array(); $headers[] = 'key: value'; $headers[] = 'key2: value2';//and so on... curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $server_output = curl_exec ($ch); curl_close ($ch); print $server_output ; 

Но как это сделать, когда заголовок содержит пары вложенных ключей?

Изменить 1:

Сделано так, но не работает (реальный новый, поэтому я должен делать это неправильно):

 $headers = array(); $headers[] = array('CustomInfo' => array( 'IsTestMessage' => "true", 'IsContentCompressed' => "false") ); $headers[] = array('AuthenticationInfo' => array( 'ApplicationId' => "SomeId", 'VersionId' => "0.9", 'RelationId' => "", 'UserId' => "SomeUserId", 'Password' => "SomePassword" ) ); $headers = serialize($headers); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); var_dump(curl_getinfo($ch,CURLINFO_HEADER_OUT)); 

Предупреждение: curl_setopt (): вы должны передать либо объект, либо массив с аргументом CURLOPT_HTTPHEADER

Изменить 2:

Когда я не сериализую $ headers, я получаю:

Примечание. Преобразование массива в строку

Related of "Php Curl HTTP POST REQUEST устанавливает настраиваемый заголовок с вложенными парами значений ключа"

В идеале вы должны использовать CURLOPT_POSTFIELDS, если это не является особым требованием от внешнего API

 $myArray = array(); $myArray[] = array('key' => 'value'); $myArray[] = array('key2' => array('value2' => array('foo' => 'bar'))); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,array('myVars' => $vars, 'myArray' => $myArray)); //Body 

Затем войдите в него $_POST['myArray']

Предупреждение: оба заголовка и переменные POST могут быть введены, поэтому я также рекомендую вам выполнить проверку отправителя (например, $_SERVER['REMOTE_ADDR'] == 127.0.0.1) если эти запросы предназначены только для вашего собственного сервера

Я не могу упомянуть о доступе к $_POST без упоминания: как я могу предотвратить SQL-инъекцию в PHP?