извлекать изображения и CSS-файлы с помощью curl-прокси в php - PullRequest
1 голос
/ 27 мая 2011

Я использую библиотеку curl для запроса прокси-сервера. Я получаю только исходный HTML-код с запрошенного URL-адреса, и этот код не восстанавливает изображения, файлы CSS и другие файлы веб-страниц. Пожалуйста, дайте мне идею, чтобы решить эту проблему. мой код:

<?php
$url = 'http://google.com';
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_PROXY, '192.168.1.200:3128');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_HEADER, 0);
$data=curl_exec ($ch); 
curl_close($ch);
echo '<br />';
print_r($data);
?>

Ответы [ 3 ]

3 голосов
/ 28 мая 2011

Мостафа,

Ну, чтобы подойти к этой проблеме, я сначала попытался бы точно понять, что делает ваш браузер, когда вы посещаете веб-страницу.Вот очень общая схема того, что происходит, когда вы вводите "http://www.google.com" в адресную строку браузера.

  1. Вы говорите браузеру загрузить URL.
  2. Затем браузер создаетзапрос (очень похоже на «запрос cURL») на указанный вами адрес.
  3. Содержимое этой страницы (в данном случае просто HTML) возвращается в ваш браузер.
  4. Затем ваш браузер читает файл HTML, пока не найдет ссылку на изображение, файл JavaScript, файл CSS и т. Д., А затем выполнит ДРУГОЙ запрос для каждого из этих внешних ресурсов.
  5. Пока эти запросы происходят,Ваш браузер продолжает читать HTML-файл, чтобы он мог отображать содержимое страницы.
  6. Как только все внешние объекты загружены и файл HTML полностью отрендерен, вы увидите полную веб-страницунарисовано на вашем экране браузером.

Итак, теперь, когда у нас это есть, полностью загрузить страницу и все ее ресурсы через прокси-сервер - это намного большесложнее, чем просто загрузить файл HTML.

Чтобы полностью загрузить страницу, вам нужно не только проанализировать HTML-код, чтобы извлечь все эти внешние файлы и сохранить их на своем сервере (временно), но также переписать исходный HTML-файл для ссылки на внешние файлы (CSS, JS, изображения), которые вы сохранили на своем сервере.Таким образом, ваш браузер должен только отправлять запросы на сервер, на котором выполняется сценарий cURL.

Личная рекомендация: не изобретайте колесо заново.Попробуйте какой-нибудь существующий скрипт, чтобы помочь вам. PHP веб-прокси

3 голосов
/ 28 мая 2011

cURL только для текста. Как правило, он загружает источник URL, не более того.

Вам потребуется проанализировать источник с помощью регулярных выражений или аналогичных инструментов, чтобы найти изображения и другие ресурсы в том виде, в котором они показаны в исходном тексте.

1 голос
/ 28 мая 2011

вы можете заменить выражение src, href следующим образом

   $result = str_replace('src="','src="'.$url.'/',$data);
   $result = str_replace('href="','href="'.$url.'/',$result);

перед печатью результата

Я надеюсь, это решит вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...