Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Сеть > cURL через прокси - 403 ошибка


Автор: cia 27.4.2007, 09:40
Всем привет.
Снова прошу помочь.
Дело такое - есть скрипт, который просто выводит IP адрес (файл getip.php):
Код

<?php
echo $_SERVER['REMOTE_ADDR'];
?>


Это дело парсю вот этим скриптом:
Код

  $url='http://www.site/getip.php';
  $ch=curl_init($url);
  curl_setopt($ch,CURLOPT_TIMEOUT,40);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURL_PROXY,'http://'.$proxy);
  curl_setopt($ch,CURLOPT_HTTPPROXYTUNNEL,1);
  $ip=curl_exec($ch);
  if(!$ip) {
    echo "ERRRRROR!!!<BR>";
    echo curl_error($ch);
  }
  curl_close($ch);
  echo "<HR>!!!".$ip."<HR>";


Ошибка в том, что при любом (из тех, что я пробовал) прокси cURL возвращает 403 ошибку.
Пробую открыть страницу getip.php из браузера - все нормально, пишет ip прокси.
В чем тут дело может быть?

Автор: capitan 27.4.2007, 10:11
Внимательно почитай мануал. http://www.php.net/manual/ru/function.curl-setopt.php
Где у тебя:
Код

curl_setopt($ch, CURLOPT_URL, $url);


и 
Код

$ch=curl_init($url);


записывается вообще-то как:
Код

$ch=curl_init();

Автор: cia 27.4.2007, 13:41
Не понял своей ошибки...

Цитата

Код

resource curl_init ( [string url] )

curl_init() создает новый сеанс CURL и возвращает дескриптор, который используется с функциями curl_setopt(), curl_exec() и curl_close(). Если передан необязательный аргумент url, опция CURLOPT_URL будет автоматически установлена в значение этого аргумента. Если этот аргумент не передан, необходимо использовать функцию curl_setopt().


Или что?

Добавлено через 7 минут и 10 секунд
В любом случае: и так и так пробую - результат один.
В Грешить, в принципе, надо на прокси - но если с браузера зайте - то все работает так как надо.
Не пойму в чем дело... Может ли мой хостер блокировать внешние соединения через прокси?

Автор: cia 27.4.2007, 14:13
Сам себе отвечаю: видимо может  smile 

Попробовал это же дело на другом хосте - результат другой... но тоже не утешительный.
Ошибку не пишет, но пишет реальный адрес хоста, а не прокси.

Поэтому вопрос: действительно ли хостер может закрыть внешние соединения через прокси, оставив прямые (проверено - работает) ?

И все же что я пишу не так? Почему IP реальный, а не прокси? Работает очень шустро даже черз сильно загруженные прокси - создается впечатление, что к проксе вообще обращений небыло. Может я еще чего забыл?

Автор: capitan 27.4.2007, 15:09
Цитата

Не понял своей ошибки...

Это не ошибка. Просто иногда под разные версии PHP один и тот же код может работать по разному. Просто нужно пробовать и так и так.
Нас чёт блокирование проксей хостером - ни разу не слышал об этом.


Да, действительно строка 
Код

curl_setopt($ch,CURL_PROXY,'http://'.$proxy);

неправильная, вот правильная:
Код

curl_setopt($ch,CURLOPT_PROXY,'http://'.$proxy);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)