То, что я хотел бы сделать, это получить некоторые данные из википедии с помощью 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 или любым другим способом, пока вы не очистите это с помощью сетевых администраторов.