Intereting Posts
Есть ли ограничение памяти для метода json_encode ()? Контроль доступа XMLHttpRequest Разрешить Происхождение, когда URL-адрес не завершен Медленная выборка содержимого из URL-адреса как сделать этот регистр preg_match незаметным? Как сохранить страницу в формате pdf в php Установка контрольных точек Xdebug исключительно в командной строке Как я могу правильно очистить данные сеанса php? Шаблон WordPress – «Ловкая фатальная ошибка: объект класса __PHP_Incomplete_Class не может быть преобразован в строку» Как экспортировать данные в файл excel с помощью PHPExcel Не запрашивается загрузка CSV-файла php includes есть ли способ включить файл, относящийся только к этому документу? Как реализовать SimpleTest в Кохане PHP preg_replace: использовать переменную Как отобразить загрузочное изображение gif или сообщение, когда PHP выполняет пакетный файл? Slim 3 получает текущий маршрут в промежуточном программном обеспечении

Получение междоменных данных php

То, что я хотел бы сделать, это получить некоторые данные из википедии с помощью ajax. После этого я оставил скрипты на стороне клиента и попытался получить некоторый случайный контент. Я пробовал с методами fopen () и fread (), но это не сработало, а затем я нашел статью, в которой был код для интернет-провайдеров, которые использовали прокси. Поскольку это мой случай, я попробовал код ниже, но он не дал никакого ответа.

<?php $opts = array('http' => array('proxy' => 'tcp://10.10.10.101:8080', 'request_fulluri' => true)); $context = stream_context_create ($opts); $data = file_get_contents('http://www.php.net', false, $context); echo $data; ?> 

Хорошо, поэтому я попробовал предложенный код с соответствующими значениями прокси-сервера:

 <?php $url = 'http://www.php.net'; $proxy = '10.10.10.101:8080'; //$proxyauth = 'user:password'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_PROXY, $proxy); //curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); $curl_scraped_page = curl_exec($ch); curl_close($ch); echo $curl_scraped_page; 

Но это дает мне эту ошибку: HTTP / 1.0 403 Forbidden Дата: Пн, 02 Июл 2012 09:41:20 GMT Сервер: Apache Content-Type: text / plain Запрет назначения

Я не понимаю, почему это не работает, и как я мог решить проблему.

это не проблема перекрестного домена, потому что вы загружаете данные с сервера, а не в браузер.

Чтобы загрузить веб-страницу с PHP через прокси-сервер, лучше всего использовать cURL (http-клиент PHP: http://php.net/manual/en/book.curl.php ).

Вот пример – это взято из аналогичного вопроса (http://stackoverflow.com/questions/5211887/how-to-use-curl-via-a-proxy):

 <?php $url = 'http://www.php.net'; $proxy = '10.10.10.101:8080'; //$proxyauth = 'user:password'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_PROXY, $proxy); //curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); $curl_scraped_page = curl_exec($ch); curl_close($ch); echo $curl_scraped_page; 

Если ваш прокси-сервер нуждается в аутентификации – вы можете установить $ proxyauth var …

Я просто проверил ваш код – просто используя свой собственный адрес прокси – и он работает.

 <?php $url = 'http://www.php.net'; $proxy = '192.168.4.200:3128'; //$proxyauth = 'user:password'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_PROXY, $proxy); //curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); $curl_scraped_page = curl_exec($ch); curl_close($ch); echo $curl_scraped_page; ?> 

Итак, вы видите, вероятно, сам прокси-сервер, который не позволяет (некоторые или все внешние?) Сайты достичь. Возможно, все, что вам нужно, это аутентификация с помощью прокси.

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