Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 11.07.2015
Сообщений: 5
1

Возвращение 404 ошибки от ссылки Yandex через CURL

11.07.2015, 13:36. Показов 1705. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Имеются ссылки (см. ниже), которые, если вставить их в адресную браузера, работают.
Через запрос CURL PHP возвращается 404 ошибка, кроме первой ссылки - первая работает без проблем.
Переадресации, естественно, соблюдаются.
Прошу прояснить, почему так и как сделать, что бы работало через CURL.

http://yabs.yandex.ru/count/0X... O4nOyFUXG0

http://yabs.yandex.ru/count/0X... pknWH-5W00

http://yabs.yandex.ru/count/0X... J5Zmzz6000
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.07.2015, 13:36
Ответы с готовыми решениями:

Настройка ошибки 404 через .htaccess
Всем привет, подскажите пожалуйста как в .htaccess фаил 404.HTML заменить на 404.PHP. Если...

CURL, промежуточная страница с редиректом на 404
Всем доброго времени суток. Есть ресурс: disk-space.ru Открываем через любой браузер: попадаем...

Не достучаться до сайта используя Curl. Ошибка 404 not found/
Пытаюсь авторизироваться в своем кабинете на сайте pulscen.ru Но никак не могу получить данные,...

CURL - при переходе по ссылке зеркала редиректит на внешнюю страницу или 404
Всем добра !!! Уважаемые специалисты и не очень, буду благодарен за оказанную вами помощь! В...

8
669 / 640 / 335
Регистрация: 26.04.2014
Сообщений: 2,122
11.07.2015, 14:12 2
Я проверил все ссылки, у меня всё возвращается нормально. Сначало 302 location на сайт, и сам сайт... Всё нормально.
0
0 / 0 / 0
Регистрация: 11.07.2015
Сообщений: 5
11.07.2015, 14:23  [ТС] 3
А у меня только одна работает... А можно Ваш код?
0
669 / 640 / 335
Регистрация: 26.04.2014
Сообщений: 2,122
11.07.2015, 14:36 4
Цитата Сообщение от Timon K Посмотреть сообщение
А у меня только одна работает... А можно Ваш код?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php header("Content-Type: text/plain");
$links = array(
    "http://yabs.yandex.ru/count/0XDcDEtqZBm40000Zh0ja5a5XOdvbG6R0cv3jm4aCuYnn_oG1OcWqP5zc0MUh3ZI0Psfu7qHfbYAlWPH0m6zkTPvGm6g0QMekY43ZG6Hi-eS5GwJWmoP1KACa2AXeA18w06la2AXb9P26gUS5ZMehbEQ0gJ00000JWIky0YySIy37Xe5iG6oX12vgU1z4RlYqNrQspn-OS7__________m_2y93wPHWixiO4nOyFUXG0",
    "http://yabs.yandex.ru/count/0XDcD6lstRS40000Zh0ja5a5XOdvbG6R0cv3jm4aYBuoFq43YQ3HaNsOPvwiED81dQivXnEcCugxxibh0hsthkgj0ge1fQu5FWMygkqz1Oq1aRFg71KEauCCcGL2ZAXb006sbEjCjPWlGQ2bFZ03hwXb006pa8NFj9WlGPIGGGkddsD2gBB5bMm1fC00001E1Axm2BnnBmCU6WMn0RA44BchEOSJk-BHVLhRF7vXmV__________3yBmaFfb62pknWH-5W00",
    "http://yabs.yandex.ru/count/0XDcD67zDsO40000Zh0ja5a5XOdvbG6R0cv3jm4aCeYpx-oH1ecMiHAOPvwiED81dQty7XIcTOgruVwL0hsy20FH0ge1fQw8RmMyguXl1Oq1aRFg71KEZx6p_Ja4dxL6Z2O8auCCcGL2ZAXb006sbEjCjPWlGQ2bCw02hwXb006paEQgj9WlGPINPGwddI8XgBiAVvW1fC00001E1Axm2BnnBmCU6WMn0RA44Bcj_1uKk-BHVLhRF7vXmV__________3yBmaFfb62pknWJ5Zmzz6000"
);
foreach ($links as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_exec($ch);
    curl_close($ch);
    echo "\r\n".str_repeat(' - ',200)."\r\n";
}
?>
0
0 / 0 / 0
Регистрация: 11.07.2015
Сообщений: 5
11.07.2015, 14:58  [ТС] 5
alexsamos33, спасибо.
Я, кажется, понял. У меня не работает CURLOPT_FOLLOWLOCATION из-за настроек PHP и я использовал скрипт, который перебирает коды ответов от сервера и делает переадресацию. Видимо проблема в нём.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function curl_redir_exec($ch)
  {
  static $curl_loops = 0;
  static $curl_max_loops = 1;
  if ($curl_loops >= $curl_max_loops)
    {
    $curl_loops = 0;
    return false;
    }
    curl_setopt($ch, CURLOPT_REFERER, 'http://yandex.ru/search/?text=%D1%80%D0%B5%D0%BC%D0%BE%D0%BD%D1%82%20%D1%81%D1%82%D0%B8%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85%20%D0%BC%D0%B0%D1%88%D0%B8%D0%BD&clid=1909644&lr=195');
    curl_setopt($ch, CURLOPT_USERAGENT, get_random_user_agent());
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
    $data = curl_exec($ch);
 
  list($header, $data) = explode("\n\n", $data, 2);
  $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  
  if ($http_code == 301 || $http_code == 302) // && $haeder===1)
    {
    $matches = array();
    preg_match('/Location:(.*?)\n/', $header, $matches);
    $url = @parse_url(trim(array_pop($matches)));
    if (!$url)
      {
      $curl_loops = 0;
      return $data;
      }
    $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
    
    if (!$url['scheme'])
      $url['scheme'] = $last_url['scheme'];
    if (!$url['host'])
      $url['host'] = $last_url['host'];
    if (!$url['path'])
      $url['path'] = $last_url['path'];
    $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
    echo $new_url.' --- '.$http_code.'<br>';
    curl_setopt($ch, CURLOPT_URL, $new_url);
    return curl_redir_exec($ch);
    }
  else
    {
    $curl_loops = 0;
    return $data;
    }
  }
0
669 / 640 / 335
Регистрация: 26.04.2014
Сообщений: 2,122
11.07.2015, 15:12 6
Timon K, Понятно... А вот я для себя когда-то давно тоже функцию написал... Вот она.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
function _curl_exec(&$ch,$maxRedirLimit=5){
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,false);
$maxRedirLimit++;
for($m=1;$m<=$maxRedirLimit;$m++){
$result=curl_exec($ch);
if($result===false){return $result;}
$info=curl_getinfo($ch,CURLINFO_REDIRECT_URL);
if($info===false){return $result;}
curl_setopt($ch,CURLOPT_POST,false);
curl_setopt($ch,CURLOPT_POSTFIELDS,null);
curl_setopt($ch,CURLOPT_URL,$info);
}
}
Вызывать также, как обычный curl_exec, только _ добавить - _curl_exec, плюс вторым параметром можно указать максимальное количество переходов, например:
PHP
1
2
3
_curl_exec($ch);
 
_curl_exec($ch, 3);
Добавлено через 2 минуты
Timon K, Попробуйте заюзать мою функцию
0
0 / 0 / 0
Регистрация: 11.07.2015
Сообщений: 5
12.07.2015, 09:05  [ТС] 7
alexsamos33, спасибо за помощь! Буду пробовать Вашу функцию.
На крайний вариант покопаюсь в настройках сервера, у меня VPS и такая возможность имеется.

Добавлено через 17 часов 52 минуты
alexsamos33, с Вашей функцией выдаёт ошибку
Notice: Use of undefined constant CURLINFO_REDIRECT_URL - assumed 'CURLINFO_REDIRECT_URL'
0
669 / 640 / 335
Регистрация: 26.04.2014
Сообщений: 2,122
12.07.2015, 10:07 8
Цитата Сообщение от Timon K Посмотреть сообщение
alexsamos33, спасибо за помощь! Буду пробовать Вашу функцию.
На крайний вариант покопаюсь в настройках сервера, у меня VPS и такая возможность имеется.

Добавлено через 17 часов 52 минуты
alexsamos33, с Вашей функцией выдаёт ошибку
Notice: Use of undefined constant CURLINFO_REDIRECT_URL - assumed 'CURLINFO_REDIRECT_URL'
Мне кажется у вас старая не обновлённая версия CURL, у меня всё работает, версия на хостинге 7.19.7
1
0 / 0 / 0
Регистрация: 11.07.2015
Сообщений: 5
12.07.2015, 10:11  [ТС] 9
Мне кажется у вас старая не обновлённая версия CURL, у меня всё работает, версия на хостинге 7.19.7
Скорее всего так и есть. В общем я отключил open_basedir в настройках apach и заработало с CURLOPT_FOLLOWLOCATION, true. Так оказалось проще в итоге.
Думаю ничего страшного на сервере из-за этого не произойдёт.
alexsamos33, спасибо за помощь!alexsamos33,
0
12.07.2015, 10:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2015, 10:11
Помогаю со студенческими работами здесь

Возвращение ссылки из функции
Привет, я немного не понимаю, почему в следующем коде в строках 16-17 надо возвращать именно...

Возвращение ссылки на локальный объект
int&amp; foo() { int a; //: warning C4172: возвращение адреса локальной или временной...

Возвращение ссылки на локальную переменную
Заметил недавно одну интересную вещь. Как вообще работает такой код? Причем коректно. int&amp; func();...

Возвращение ссылки на локальный объект
В каком-то коде мельком видел что-то вроде: char&amp; char_stub() { char c; return c; }; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru