puchkovk
@puchkovk
Усложнять — просто. Упрощать — сложно.

Как при помощи PHP и cUrl передать GET запрос с XML в теле запроса?

Для работы с одним API, мне понадобилось передать некий XML в теле запроса, а не в параметрах.

Собственно, вопрос - как дополнить этот код, чтобы содержимое $xml попало в тело запроса?
$url = 'http://site.ru/api/';
$xml = '<request><tag>1</tag></request>';

$curl = curl_init ( $url );
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);       
curl_setopt($curl, CURLOPT_USERPWD, "user:pass"); 
curl_setopt ( $curl, CURLOPT_HTTPHEADER,  Array ( "Content-Type: text/xml" ) );
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, true );

// Такой вариант (попытка "обмануть" cUrl подсунув ему POST) не работает:
// curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); 
// curl_setopt($ch, CURLOPT_POSTFIELDS,$xml);

$result = curl_exec($curl);


Мне нужен именно GET запрос, POST или PUT не подходят из-за особенностей API.

UPD: Забыл уточнить, что по надо пройти BASIC HTTP авторизацию
  • Вопрос задан
  • 4658 просмотров
Решения вопроса 1
puchkovk
@puchkovk Автор вопроса
Усложнять — просто. Упрощать — сложно.
Промучавшись с cUrl весь вечер и часть утра, нашел статью на Хабре: habrahabr.ru/post/48726

Сделал все при помощи file_get_contents.

$url = 'http://site.ru/api/';
$xml = '<request><tag>1</tag></request>';

$username = 'user';
$password = '12345';

$opts = array('http' =>
    array(
        'method'  => 'GET',
        'header'  => "Content-Type: text/xml\r\n"
            . "Authorization: Basic ".base64_encode("$username:$password")."\r\n",
        'content' => $xml,
        'timeout' => 60
    )
);

$context  = stream_context_create($opts);

$result = file_get_contents($url, false, $context, -1, 40000);


Уже после того, как все заработало, наткнулся на HTTPFUL, и guzzle, обе библиотеки довольно мощные, httpful - попроще.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы