Обработка заголовков CURL перед загрузкой тела - PullRequest
1 голос
/ 05 декабря 2009

Используя PHP и CURL (если в этом случае нет лучшей альтернативы, чем CURL), возможно ли иметь функцию php для обработки ответа заголовка перед загрузкой файла?

Например:

У меня есть скрипт, который загружает и обрабатывает URL-адреса, предоставленные пользователем. Я хотел бы добавить проверку, чтобы, если файл недопустим для моего процесса (не текстовый файл, слишком большой и т. Д.), Запрос CURL был отменен до того, как сервер потратит время на загрузку файла.

Обновление: решение Класс PEAR HTTP_Request2: http://pear.php.net/package/HTTP_Request2/ Дает вам возможность устанавливать наблюдателей на соединение и генерировать исключения для отмены в любое время. Прекрасно работает для моих нужд!

Ответы [ 3 ]

6 голосов
/ 05 декабря 2009

Используя cURL, выполните запрос HTTP HEAD для проверки заголовков, затем, если он действителен (статус 200), выполните полный запрос HTTP GET.

Базовая опция, которую вы должны установить - CURLOPT_NOBODY, которая изменяет запрашиваемый тип на HEAD

curl_setopt($ch, CURLOPT_NOBODY, true);

Затем после выполнения запроса вам необходимо проверить статус возврата, который можно сделать с помощью curl_getinfo ()

$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
5 голосов
/ 17 декабря 2014

Я знаю, что это старая тема, но на случай, если люди придут сюда в будущем.

С CURL вы можете использовать CURLOPT_WRITEFUNCTION , который позволит вам сделать обратный вызов, который будет вызван, как только ответ тела начнет поступать и его нужно будет написать. В этот момент вы можете прочитать заголовки и отменить процесс, и тело не будет загружено. Все в одном запросе.

Более подробные примеры и примеры кода см. PHP / Curl: проверка заголовков ответов перед загрузкой тела

1 голос
/ 05 декабря 2009

Вот пример, как вы можете решить:

// Include the Auth string in the headers
// Together with the API version being used
$headers = array(
    "Authorization: GoogleLogin auth=" . $auth,
    "GData-Version: 3.0",
);

// Make the request
curl_setopt($curl, CURLOPT_URL, "http://docs.google.com/feeds/default/private/full");
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($curl);
curl_close($curl);

// Parse the response
$response = simplexml_load_string($response);

// Output data
foreach($response->entry as $file)
{
       //now you can do what ever if file type is a txt
        //if($file->title =="txt")
        // do something
        else
        // do soething
    echo "File: " . $file->title . "<br />";
    echo "Type: " . $file->content["type"] . "<br />";
    echo "Author: " . $file->author->name . "<br /><br />";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...