Как отправить XML и другие параметры записи через cURL в PHP - PullRequest
4 голосов
/ 23 апреля 2010

Я использовал приведенный ниже код для отправки XML в мой REST API.$ xml_string_data содержит правильный XML, и он хорошо передается mypi.php:

    //set POST variables
    $url = 'http://www.server.cu/mypi.php'; 
    $fields = array(
                'data'=>urlencode($xml_string_data)
            );

    //url-ify the data for the POST
    $fields_string = "";
    foreach($fields as $key=>$value) 
    { 
      $fields_string .= $key.'='.$value.'&'; 
    }
    rtrim($fields_string,'&');

    echo $fields_string;

    //open connection
    $ch = curl_init();

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_POST,count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
    curl_setopt($ch,CURLOPT_HTTPHEADER,array (
        "Expect: "
    ));

    //execute post
    $result = @curl_exec($ch);

Но когда я добавил другое поле:

    $fields = array(
      'method' => "methodGoPay",
      'data'=>urlencode($xml_string_data)
    );

Оно перестало работать.На mypi.php я больше не получаю больше параметров POST!

Не могли бы вы сказать мне, что делать, чтобы отправить XML и другие параметры публикации в одном запросе cURL?

Пожалуйста, не предлагайте использовать какие-либо библиотеки, я не собираюсь делать это на простом PHP.

1 Ответ

3 голосов
/ 23 апреля 2010

Я не вижу ничего плохого в этом сценарии.Скорее всего, это проблема mypi.php.

У вас есть дополнительный & в конце.Может быть, это смущает сервер?Ртрим не меняет $ field_string и возвращает обрезанную строку.

Постполи можно упростить следующим образом:

$fields = array(
      'method' => "methodGoPay",
      'data'=> $xml_string_data // No encode here
);

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...