Отправьте почтовый запрос XML на веб-сервер с помощью CURL

Я пытаюсь отправить запрос на веб-сервер, используя php и curl. Я никогда не делал ничего подобного раньше, и хотя в Интернете есть много хороших примеров, у меня есть некоторые трудности с пониманием некоторых команд curl.

Это то, что я хочу сделать: существует установленная веб-служба (например, служба веб-карт), и я хочу, чтобы мой php-код отправлял почтовый XML-запрос в эту службу. В качестве ответа я хочу получить файл XML.

Это то, что у меня есть до сих пор:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, ''); 
    /*curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));*/
    /* curl_setopt($ch, CURLOPT_HEADER, 0);*/
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
    /*curl_setopt($ch, CURLOPT_REFERER, '');*/
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $ch_result = curl_exec($ch);
    curl_close($ch);
    echo $ch_result;

Как я уже сказал, я новичок в php, а также в использовании curl, и я думаю, что мне не хватает некоторых концепций. Мои вопросы: 1) Какую строку (ссылку) я должен поместить в:

          curl_setopt($ch, CURLOPT_URL, ''); 

Это имя хоста службы, которой я хочу отправить запрос?

2) В строке 6 переменная $xml содержит файл xml, который я хочу отправить в качестве запроса. Это правильно или эта переменная должна содержать что-то еще?

3) В каких случаях мне нужно использовать httpheader или заголовок (row3 и row4);

Спасибо за помощь. Димитрис


person user1919    schedule 28.03.2013    source источник


Ответы (2)


Попробуйте так:

  $url = 'https://android.googleapis.com/gcm/send';
  $ch = curl_init();
  curl_setopt( $ch, CURLOPT_URL, $url );
  curl_setopt( $ch, CURLOPT_POST, true );
  curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt( $ch, CURLOPT_POSTFIELDS, "<xml>here</xml>" );
  $result = curl_exec($ch);
  curl_close($ch);

Для получения более подробной информации посетите: http://php.net/manual/en/function.curl-setopt.php

person PKeidel    schedule 28.03.2013
comment
Итак, внутри тегов ‹xml› я помещаю всю строку xml? - person user1919; 28.03.2013
comment
Если весь ваш xml находится в $xml, эта строка должна быть: curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); - person PKeidel; 28.03.2013
comment
Еще одна вещь, которую я не совсем понял, это то, что содержит переменная $url. Имя хоста сервера, на который я отправлю запрос? - person user1919; 28.03.2013
comment
Это тот же URL-адрес, что и при просмотре принимающего скрипта через браузер. Если вы хотите отправить POST в PHP-скрипт run.php на сервере example.com в подпапке с именем api, ваш $url должен быть example.com/api/run.php - person PKeidel; 28.03.2013
comment
Так что в моем случае было бы достаточно написать: curl_setopt($ch, CURLOPT_URL, 'sendRequest.php'); Где sendRequest.php содержит весь вышеуказанный код. Верно? - person user1919; 28.03.2013
comment
Нет, с помощью CURLOPT_URL вы указываете URL-адрес, на который отправляются данные. Вы сказали, что хотите отправить запрос POST в веб-службу. Таким образом, $url — это полный URL-адрес этой веб-службы. - person PKeidel; 28.03.2013
comment
Ага! Я понимаю! Спасибо за помощь. Чуть позже постараюсь, чтобы получилось! - person user1919; 28.03.2013
comment
Без проблем. Вы уже задали 5 вопросов, пора начинать принимать ответы ;) - person PKeidel; 28.03.2013

Я думаю, что использование классов HTTP может лучше подходить для выполнения HTTP-запросов.

См. http://www.php.net/manual/intro.http.php .

Кроме того, существуют специальные библиотеки WMS для PHP, например. http://docs.huihoo.com/geoserver/1.6.0/Parsing%20and%20using%20WMS%20capabilities%20with%20PHP.html .

person til_b    schedule 28.03.2013