Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
Pypsik
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 14
1

Отправка запросов, а так же curl

05.06.2014, 19:29. Просмотров 4041. Ответов 10
Метки нет (Все метки)

Здравствуйте! У меня появилась идея по написанию что-то вроде бота, ну как бота... В общем, мне нужно, чтобы определённые запросы проходили раз в пару минут...
Нужна авторизация, так как я хоть что-то понимаю в php, то понимаю, что нужен именно curl, без него никак тут...
Так вот, после авторизации, будет просто проходить пару запросов, каждый раз в 3 минуты(примерно)...
Может кто-то поможет мне? Объяснит, что и где к чему, чтобы я дальше сам понимал... В php devel studio могу всё сделать, но я не люблю, когда комп выключен и бот не работает, хотел бы сделать через крон это всё и тогда, круглыми сутками будет всё работать... Прошу помощи!

Добавлено через 22 секунды
Запрос сам получить могу!

Добавлено через 11 минут
Я так понял, можно всё это сделать через file_get_contents(), только вопрос как?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2014, 19:29
Ответы с готовыми решениями:

Подскажите curl или file_get_contents ? Для ограничения запросов по времени
Добрый день. Получаю данные со стороннего сервиса через их API (json) У...

CURL и отправка Cookie
Всем доброго времени суток. Проблема следующего характера: с помощью cURL...

Отправка переменных из таблицы по cURL
Добрый день! Помогите модернизировать мой код: -нужно сделать условия...

PHP CURL отправка файла
Здравствуйте, друзья! Подскажите, изучаю работу с КУРЛ. Ради спортивного...

Отправка GET запроса средствами CURL
Добрый день! Есть такая проблема: Хочу получить информацию со страницы к...

10
Voka
206 / 198 / 110
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
05.06.2014, 19:37 2
через file_get_content() не получится, тут нужен крон.
Сам в нем не сильно шарю но немного представляю как он работает.
Тебе надо сделать так:
Послать запрос на авторизацию с твоими данными со включенными куками.
Если авторизация прошла и пришли те куки отправлять на нужную тебе страницу post/get запросы.
Каждый раз проверяя те ли куки у тебя
0
Pypsik
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 14
05.06.2014, 20:12  [ТС] 3
Voka, я это прекрасно понимаю, но я не силён в php, я не понимаю, как отправить запрос...
вот кусок, что смог сделать
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$url='http://thebest-fruitfarm.ru/;
function get_web_page( $url )
{
  $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14";
 
  $ch = curl_init( $url );
 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   // возвращает веб-страницу
  curl_setopt($ch, CURLOPT_HEADER, 0);           // не возвращает заголовки
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);   // переходит по редиректам
  curl_setopt($ch, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
  curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  // useragent
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
  curl_setopt($ch, CURLOPT_TIMEOUT, 120);        // таймаут ответа
  // тут по идее должны идти запросы
  
  curl_close( $ch );
}
Может ты можешь помочь? Как сделать авторизацию? Я так понимаю, нужно просто запихнуть пару запросов, или как?

Добавлено через 28 минут
Voka, выше код - бред...
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$url = 'http://thebest-fruitfarm.ru';
function auth( $url )
{
  $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14"; 
  $ch = curl_init( $url ); 
  curl_setopt($ch, CURLOPT_URL,$url);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); // запись куков
  curl_setopt($ch, CURLOPT_POST,1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, "url=http://thebest-fruitfarm.ru&log_email=тут мой логин&pass=тут мой пароль");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   // возвращает веб-страницу  
  curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  // useragent
  curl_exec ($ch);
  curl_close( $ch );
}
Теперь собственно вопрос, как сделать запрос, вроде чуть-чуть правильно сам накатал...
0
insideone
Модератор
Автор FAQ
3658 / 938 / 112
Регистрация: 10.01.2010
Сообщений: 2,523
06.06.2014, 01:09 4
Вызвать
PHP
1
auth($url);
0
MVS76
Не мoдepaтор
339 / 314 / 94
Регистрация: 07.07.2012
Сообщений: 1,015
Записей в блоге: 7
06.06.2014, 01:59 5
Лучший ответ Сообщение было отмечено Pypsik как решение

Решение

Вот тут посмотрите.
1
Pypsik
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 14
06.06.2014, 10:40  [ТС] 6
MVS76, сейчас посмотрим, если работает, + твой)

Добавлено через 2 минуты
MVS76, всё работает, спасибо... Можете ли подсказать как поставить на крон? И нужно ли, каждый раз делать авторизацию? или можно 1 раз сделать авторизацию и дальше выполнять действия, а то если я буду каждые 3 минуты авторизироваться и делать действия на сайте(заподозрят просто в использовании сторонних программ)
0
MVS76
Не мoдepaтор
339 / 314 / 94
Регистрация: 07.07.2012
Сообщений: 1,015
Записей в блоге: 7
06.06.2014, 13:07 7
Лучший ответ Сообщение было отмечено Pypsik как решение

Решение

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

Для записи раз в некоторое время, пишите такой код
PHP
1
2
3
4
if(текущее время == условие) {
// тут код который пишет куки, то есть с этой строкой
  curl_setopt($ch, CURLOPT_[B]COOKIEJAR[/B],$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
}
Поставить на крон ....
Вынесите код в отдельный файл, и напишите в службу поддержки хостинга, в письме укажите какой именно файл (название) и его расположение (путь), они вам напишут полный путь для крона, далее вы уже настроите на хостинге время через которое должен запускаться крон.
1
Pypsik
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 14
06.06.2014, 13:38  [ТС] 8
MVS76, к сожалению на хостинге(бесплатном) разрешено только использовать часы, сутки и т.д., а минуты только тем кто платил за премиум, есть ли какой-нибудь способ сделать что-то вроде псевдо-крона? за выше условие спасибо, но я подумал, зачем мне так? Ведь можно просто поставить на крон(каждый час) получать куки и сохранять их в файл
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
<?php
$urlTo1 = 'http://thebest-fruitfarm.ru/'; // Куда данные послать первый раз
$login = 'логин';                            // Логин
$password = 'пароль';                            // Пароль  
$post1 = 'log_email='.$login.'&pass='.$password; // POST данные авторизации 
 
$urlTo2 = 'http://thebest-fruitfarm.ru/account/bonus6'; // Куда данные послать второй раз
$post2 = 'bonus=%CF%EE%EB%F3%F7%E8%F2%FC+%E1%EE%ED%F3%F1'; // POST данные второй раз
 
 
$ch = curl_init(); // Инициализация сеанса
curl_setopt($ch, CURLOPT_URL, $urlTo1);
curl_setopt($ch, CURLOPT_HEADER, 1); // получать заголовки
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,30);
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36');
curl_setopt($ch, CURLOPT_REFERER, 'http://google.ru/');
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt'); // записываем/запоминаем куки
curl_setopt($ch, CURLOPT_POSTFIELDS, $post1); // куда посылаем пост первый раз
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Говорим скрипту, чтобы он следовал за редиректами которые происходят во время авторизации
$result = curl_exec($ch);
 
curl_setopt($ch, CURLOPT_URL, $urlTo2);
curl_setopt($ch, CURLOPT_HEADER, 1); // получать заголовки
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,30);
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36');
curl_setopt($ch, CURLOPT_REFERER, $urlTo1); // с какой страницы пришли (желательно указать)
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_COOKIEFILE,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt'); // говорим что уже авторизованы и показываем куки
curl_setopt($ch, CURLOPT_POSTFIELDS, $post2); // куда посылаем пост второй раз
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);     // Говорим скрипту, чтобы он следовал за редиректами которые происходят во время авторизации
$result = curl_exec($ch);
 
curl_close($ch);         // Завершаем сеанс
 
echo $result; // выводим результат
?>
Я тут подумал, так как на сайте можно только каждый час и более сделать крон, то мне в принципе запоминание куков и не нужно..... Спасибо.
Но если вы мне подскажете как сделать псевдо-крон(гугл не помог), то буду благодарен очень ...
0
MVS76
Не мoдepaтор
339 / 314 / 94
Регистрация: 07.07.2012
Сообщений: 1,015
Записей в блоге: 7
06.06.2014, 14:29 9
Лучший ответ Сообщение было отмечено Pypsik как решение

Решение

Я использую так:

parser.php
PHP
1
2
3
4
5
6
7
8
9
10
11
$last_cron_time = file_get_contents('cron.txt'); // читаем файл
mt_srand(time()+(double)microtime()*1000000);
$xwx = mt_rand(10,60); // рандом, чтоб не было всегда ровно в определенный промежуток
$period = time() - 60 * (30+$xwx); // подберите под себя
if ($last_cron_time < $period) { // условие, если прошло больше от прошлого раза
...
curl_close($ch); // Завершаем сеанс
echo $result; // выводим результат
 
file_put_contents('cron.txt',time()); // пишем время выполнения в файл
}
Далее на самой посещаемой странице сайте, не зависимо от того кто посещает - бот и юзер, вызываете сам скрипт для его выполнения
PHP
1
include('parser.php');
1
Pypsik
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 14
06.06.2014, 16:13  [ТС] 10
MVS76, т.е. мои запросы будут отправляться в том случае, если кто-то будет посещать сайт? Я правильно понимаю? А так же вопрос, я поставил крон, но запросы не отправляются, вопрос почему?
0
MVS76
Не мoдepaтор
339 / 314 / 94
Регистрация: 07.07.2012
Сообщений: 1,015
Записей в блоге: 7
06.06.2014, 16:46 11
Цитата Сообщение от Pypsik Посмотреть сообщение
в том случае, если кто-то будет посещать сайт?
Правильно, но сайт как правило бот посещает часто.
Цитата Сообщение от Pypsik Посмотреть сообщение
я поставил крон, но запросы не отправляются
Что-то не верно сделано, попробуйте отправить руками, если отрабатывает, то искать причину в ином.
0
06.06.2014, 16:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 16:46

Отправка post запроса php cURL
Объясните такой момент, как отослать post запрос просто попадая на страницу....

Отправка запросов в php
Как аналогично &lt;form action&gt; отправить запросы с помощью пхп? вот была тема...

Отправка запросов на php
Привет всем. Вопрос вот в чём: У меня есть программа, она должна отправлять...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru