Разбор данных PHP CURL - PullRequest
       9

Разбор данных PHP CURL

1 голос
/ 31 июля 2011

В течение прошедшего дня я возился с CURL и не могу понять, как разобрать возвращаемые данные. Я знаю, что мог бы написать REGEX для извлечения данных из ответа, но, похоже, есть какая-то функция, которую я, вероятно, упускаю. Вот что я хотел бы попробовать и сделать.

Я хочу сделать POST в другой домен и вернуть 3 вещи 1. заголовки ответа 2. данные ответа 3. сессионный cookie

Есть ли способ вернуть эти 3 вещи отдельно? Прямо сейчас я просто возвращаю текстовый ответ с заголовком ответа и данными ответа. Я хотел бы иметь возможность сделать что-то вроде

$Response = curl_exec($Curl_Connection);
$ResponseData = $Response['Data'];
$ResponseHeader = $Response['Header'];
ResponseCookie = $Response['Cookie'];

Есть ли в curl что-нибудь подобное?

Ответы [ 2 ]

5 голосов
/ 31 июля 2011

Как я уже ответил:

при запросе заголовков CURLOPT_HEADER данные постов не возвращаются.PHP CURL

Добавить:

curl_setopt($Curl_Connection, CURLOPT_HEADER, TRUE);

$Response = curl_exec($Curl_Connection);
$curlHeaderSize=curl_getinfo($ch,CURLINFO_HEADER_SIZE);

$ResponseData = mb_substr($result, $curlHeaderSize);
$ResponseHeader = mb_substr($result, 0, $curlHeaderSize);

preg_match_all('|Set-Cookie: (.*);|U', $ResponseHeader, $content);   
$ResponseCookie = implode(';', $content[1]);
3 голосов
/ 03 октября 2012

Согласно документам curl:

/* TRUE to include the header in the output. */
curl_setopt($Curl_Connection, CURLOPT_HEADER, TRUE);

Таким образом, заголовок добавляется к выводу команды curl_exec.Я выплевывал это и не вижу способа извлечь заголовок отдельно от тела ответа.Ситуация ухудшается, когда вы начинаете читать сжатый вывод (сжатый, раздутый)

Кроме того, это одна большая строка, а не массив, поэтому в случае, если вам нужен заголовок в таком формате, как, например, curl_getinfoвозвращает массив.

Проще всего сделать это:

$backend_output = curl_exec($ch);
list( $backend_response_headers, $backend_response_body) 
      =  explode("\r\n\r\n", $backend_output, 2);

Это разделит эти 2 вверх, но вы получите строку для заголовка ответа, а не массив, которыйбыло бы намного более полезным.Теперь создание массива из этого не так очевидно, даже с регулярным выражением, так как вы не можете разбить, например, на что-то простое, например / (\ w) \ s: (\ w) / as ':' может встречаться в определенных полях,Было бы очень круто, если бы curl предлагал заголовки отдельно, но, поскольку я просматриваю документы, их там, похоже, нет.

Что касается ваших сессионных файлов cookie, я считаю, что вам нужно использовать CURLOPT_COOKIESESSION =Верный вариант для этого, но у меня меньше опыта в отношении файлов cookie, поскольку у меня едва ли есть профессиональная потребность в их использовании.Удачи

обновление: заголовки, которые вы можете проанализировать с помощью http://php.net/manual/en/function.http-parse-headers.php или пользовательской функции из раздела комментариев пользователя, если вам не хватает pecl.

...