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

Почему file_get_contents работает через раз?

25.07.2016, 14:24. Показов 3449. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, почему функция file_get_contents работает через раз? Причем в 60% работает нормально, в 40% выдает ошибку:
Warning: Connection timed out in /home/u10582/public_html/res.php on line 2
Было бы понятно, если бы оно вообще неработало, но ведь периодически всё нормально. Посылаю запрос на 10 страниц, из них 4-5 отказываются. Посылаю запросы на сервера ВК, наверное SERVER перегружается. Это как то лечится?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2016, 14:24
Ответы с готовыми решениями:

Кнопка работает через раз, почему?
Добрый день, делаю сайт. Сделал кнопки, а они работают через раз. Помогите Вот CSS: * {...

Почему работает программа через раз?
Крч авторизация и регистрация ... записываю данные при регистрации в файл ... file<<login<<"...

Почему не работает функция file_get_contents()?
Всем привет!) Подскажите пожалуйста, мне нужно авторизованному пользователю показывать 5 его...

Почему построение графиков с использованием plotly работает "через раз"?
При запусках скрипта график в Хроме, то строится нормально, то не строится вообще. И хром сообщает...

21
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
25.07.2016, 15:15 2
Цитата Сообщение от mininvit Посмотреть сообщение
Посылаю запрос на 10 страниц
Как часто? На какие сайты запросы - одни и те же или разные?
0
259 / 193 / 50
Регистрация: 15.07.2016
Сообщений: 649
25.07.2016, 15:34 3
Через апи работаете? Там для приложений, у которого менее 10к установок, лимит на 5 запросов в секунду.
Для открытых запросов, типа _api.vk.com/method/users.get?user_ids=1 лимит ещё меньше, до 3 запросов.
В общем случае, нужны таймауты.
Если же дело не в этом, используйте curl. А то у пыха периодические траблы случаются при использовании fgc и ей подобных функций.
0
1 / 1 / 0
Регистрация: 16.07.2016
Сообщений: 186
25.07.2016, 16:06  [ТС] 4
pav1uxa, отправляю запросы одни и те же на vk.com/foaf.php?id=здесь подставляю id пользователя.

Добавлено через 47 секунд
koders, Я не через api, я через foaf. А можно пример через curl, а то я новичок не много в этом понимаю? У меня есть код, который через раз срабатывает:
PHP
1
2
3
4
5
<?
$r = simplexml_load_file("http://vk.com/foaf.php?id=1"); //куда обращаемся
$t = (string) $r->xpath('//ya:created/@dc:date')[0]; //берем дату регистрации пользователя
echo $t;
?>
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
25.07.2016, 20:41 5
Цитата Сообщение от mininvit Посмотреть сообщение
Я не через api, я через foaf
Это тоже форма API

Цитата Сообщение от mininvit Посмотреть сообщение
Warning: Connection timed out in
Собственно означает то что написано, не удалось установить коннект, либо ответ не был получен за определённое время таймаута
Остается лишь повторить запрос

Чтобы подробнее понимать что происходит, лучше запросы делать через cURL
0
1 / 1 / 0
Регистрация: 16.07.2016
Сообщений: 186
25.07.2016, 20:59  [ТС] 6
incideone, не подскажете как через curl?
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
26.07.2016, 23:06 7
Как-то так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ch = curl_init('http://vk.com/foaf.php?id=1');
curl_setopt_array($ch, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FAILONERROR => true,
));
 
$response = curl_exec($ch);
 
if ( $error = curl_error($ch) ) {
    echo 'Ошибка: '.$error;
} else {
    $r = simplexml_load_string($response);
    $t = (string) $r->xpath('//ya:created/@dc:date')[0]; //берем дату регистрации пользователя
    echo $t;
}
0
1 / 1 / 0
Регистрация: 16.07.2016
Сообщений: 186
27.07.2016, 10:16  [ТС] 8
insideone, вывелось только "Internal Server Error" Ошибка 500.)
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
27.07.2016, 19:41 9
Видать и vk иногда падает...
0
1 / 1 / 0
Регистрация: 16.07.2016
Сообщений: 186
27.07.2016, 20:33  [ТС] 10
insideone, Может существуют ещё другие способы. Другие сайты как то же обходят эту защиту. Пробовал добавлять еще CURLOPT_USERAGENT, который выставляет браузер и т.п, все равно такая же ошибка. А соединение с curl не надо закрывать curl_close?
0
146 / 105 / 44
Регистрация: 30.04.2016
Сообщений: 550
27.07.2016, 22:59 11
mininvit, надо закрывать. Во-вторых используйте VPS или потестите на своем основном компьютере. В-третьих, не думайте, что в вк дураки сидят, вы случайно разом запросы не отправляете? ВК блочить может их.
0
1 / 1 / 0
Регистрация: 16.07.2016
Сообщений: 186
28.07.2016, 10:08  [ТС] 12
php10, Всмысле разом? У меня есть форма, куда я вставляю id пользователя:


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
<?
if(isset($_POST['submit'])) {
$text = $_POST['text'];
$ch = curl_init("http://vk.com/foaf.php?id=$text");
curl_setopt_array($ch, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FAILONERROR => true,
));
 
$response = curl_exec($ch);
 
if ( $error = curl_error($ch) ) {
    echo 'Ошибка: '.$error;
} else {
    $r = simplexml_load_string($response);
    $t = (string) $r->xpath('//ya:created/@dc:date')[0]; //берем дату регистрации пользователя
echo $t;
}
curl_close($ch);
}
?>
<form method="post" action="res.php">
    <input type="text" name="text" />
    <input type="submit" name="submit" />
</form>

На денвере пробовал, тоже самое.
0
146 / 105 / 44
Регистрация: 30.04.2016
Сообщений: 550
28.07.2016, 16:54 13
mininvit, Я пока не могу попробовать, буду дома - проверю. Вы попробуйте маскироваться браузером, вы этого не делаете.
0
1 / 1 / 0
Регистрация: 16.07.2016
Сообщений: 186
28.07.2016, 17:57  [ТС] 14
php10, Хорошо. Я вот думаю, может в коде какая ошибка? На глаз не вижу, но другие сайты тоже не открывает.
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
<?
if(isset($_POST['submit'])) {
$text = $_POST['text'];
$ch = curl_init("http://vk.com/foaf.php?id=$text");
curl_setopt_array($ch, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0',
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_HEADER => 0,
    CURLOPT_POST => 0,
));
 
$response = curl_exec($ch);
 
if ( $error = curl_error($ch) ) {
    echo 'Ошибка: '.$error;
} else {
    $r = simplexml_load_string($response);
    $t = (string) $r->xpath('//ya:created/@dc:date')[0]; //берем дату регистрации пользователя
echo $t;
}
curl_close($ch);
}
?>
<form method="post" action="res.php">
    <input type="text" name="text" />
    <input type="submit" name="submit" />
</form>
0
146 / 105 / 44
Регистрация: 30.04.2016
Сообщений: 550
28.07.2016, 18:10 15
mininvit, у меня все работает
0
1 / 1 / 0
Регистрация: 16.07.2016
Сообщений: 186
28.07.2016, 20:42  [ТС] 16
php10, По ходу я что-то делаю не так. А вы где запускали на хостинге?
0
146 / 105 / 44
Регистрация: 30.04.2016
Сообщений: 550
28.07.2016, 22:01 17
mininvit, неа, просто скопировал ваш код и запустил на Windows 8.1 в OpenServer.
0
1 / 1 / 0
Регистрация: 16.07.2016
Сообщений: 186
28.07.2016, 22:23  [ТС] 18
php10, А на OpenServer какая версия php стоит? У меня пишет timeout. А Вы можете несколько раз по refresh'ить страницу, интересно будет какая либо ошибка.
0
146 / 105 / 44
Регистрация: 30.04.2016
Сообщений: 550
28.07.2016, 22:38 19
Apache 2.2
PHP 5.4
Рефрешил - все окей. )) Проблема не в этом.
0
1 / 1 / 0
Регистрация: 16.07.2016
Сообщений: 186
29.07.2016, 13:34  [ТС] 20
)) Незнаю даже, а в чем тогда? Вроде не на hostinger'е не работает, не на локальном. Ладно, завтра попробую php версию сменить, может поможет)

Добавлено через 14 часов 12 минут
php10, Да на самом деле все работает. Оказалось, что к вечеру на этот сервер идет слишком много запросов, поэтому у меня была 500 ошибка. Но опять же, там действительно лимит по браузерам(20 запросов может быть), как то можно загрузить больше браузеров, чтобы curl случайным образом выбирал нужный?

Добавлено через 35 минут
Или может он не по браузеру читает, а по IP? IP в curl можно менять?
0
29.07.2016, 13:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2016, 13:34
Помогаю со студенческими работами здесь

Почему смена текста работает только один раз? Что неправильно в коде и почему?
Нужно чтобы при щелчке мыши на поверхности кнопки текст метки Label изменялся на текст окна...

Мышка работает через раз, иногда вообще не работает
Перестала нормально работать мышка: работает через раз, иногда вообще не нажимает - надо долго...

Почему через раз зацикливается?
В задаче игроки должны отгадать число, но если они с первого раза число не отгадают, то программа...

Почему _getch() срабатывает через раз?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstdlib&gt; #include &lt;math.h&gt;...


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

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