Доброе время суток: Помогите нубу мне нужно выполнить такой алгоритм запросить страницу http://my.mail.ru/?ffsputnik=1 на проекте мой мир и сохранить её в файл. Делаю это так Код (Text): <?php $ch = curl_init("http://my.mail.ru/?ffsputnik=1"); $fp = fopen("example_homepage.txt", "a+"); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); fclose($fp); ?> Но тогда у меня сохраняется страница как не авторизованого пользователя А как мне авторизовавшись запросить используя Cookie можно пример?
Код (PHP): $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://site.ru'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_USERAGENT,'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.10.229 Version/11.64'); curl_setopt($ch, CURLOPT_HTTPHEADER,array (Accept => 'text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap',Accept-Language => 'ru-RU,ru;q=0.9,en;q=0.8',Accept-Encoding => 'gzip, deflate')); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER,TRUE); curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/my_cookies.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE,$_SERVER['DOCUMENT_ROOT'].'/my_cookies.txt'); curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_REFERER, 'https://mysite.ru'); curl_setopt($ch, CURLOPT_POSTFIELDS, array("поле1" => "значение поля1", "поле2" => "значение поля2")); $home = curl_exec($ch); curl_close($ch);
demyan1 - а можно разъяснения, хочу разобраться а не бездумно копировать код. curl_setopt($ch, CURLOPT_URL, 'https://site.ru'); в этой строке что подразумевается? сайт авторизации или что? curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/my_cookies.txt');тут понятно откуда берем cookies curl_setopt($ch, CURLOPT_REFERER, 'https://mysite.ru'); а что пишем тут? что за страница? curl_setopt($ch, CURLOPT_POSTFIELDS, array("поле1" => "значение поля1", "поле2" => "значение поля2")); И что тут должны быть за значения?
да. Код (PHP): curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // для остановки cURL от проверки сертификата узла сети curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // для проверки существования общего имени и также его совпадения с указанным хостом curl_setopt($curl, CURLOPT_USERAGENT,'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.10.229 Version/11.64'); // представляемся как опера curl_setopt($curl, CURLOPT_HTTPHEADER,array (Accept => 'text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap',Accept-Language => 'ru-RU,ru;q=0.9,en;q=0.8',Accept-Encoding => 'gzip, deflate')); // передаём заголовки curl_setopt($curl, CURLOPT_HEADER, TRUE); // включаем приём заголовков curl_setopt($curl, CURLOPT_RETURNTRANSFER,TRUE); // результат выводим в переменную вместо прямого вывода в браузер curl_setopt($curl, CURLOPT_FOLLOWLOCATION,TRUE); // следуем туда, куда скажет сервер curl_setopt($curl, CURLOPT_COOKIESESSION, TRUE); // начинаем новую сессию и перезаписываем cookies curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30); // ждём 30сек. при попытке соединения curl_setopt($curl, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/my_cookies.txt'); // имя файла, содержащего cookies curl_setopt($curl, CURLOPT_COOKIEFILE,$_SERVER['DOCUMENT_ROOT'].'/my_cookies.txt'); // имя файла, в котором будут сохранены все внутрение cookies curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); // декодируем запрос $homcurl_close($curl); // закрываем сессию Добавлено спустя 3 минуты 5 секунд: поля на странице сайта, которые нам необходимо заполнить значениями (логин, пароль, е-майл и т.д., в т.ч. могут быть скрытыми). вообще-то инфы на эту тему в сети дохрена, было бы желание искать... Добавлено спустя 1 минуту 20 секунд: реферер, откуда пришли на сайт (можно не устанавливать, но иногда нужно)
так ага ясно но вот еще кое что не понел я авторизуюсь вот тут https://e.mail.ru/cgi-bin/login? curl_setopt($ch, CURLOPT_POSTFIELDS, array("поле1" => "значение поля1", "поле2" => "значение поля2")); и что писать в поле1 ? не понел.... поле 1 содержит логин и получается curl_setopt($ch, CURLOPT_POSTFIELDS, array("поле1" => "логин", "поле2" => "пароль")); А что писать за вместо поле1 и поле2
установите какой-нибудь сниффер, затем без помощи скрипта авторизуйтесь на странице и параллельно смотрите какие данные из каких полей передаются при авторизации. если у вас Internet Explorer(вроде и Firefox подходит), можете воспользоваться HttpWatch (скачаете в сети). либо ещё вариант - посмотрите исходный код страницы, будьте внимательны - некоторые поля имеют свойство: Код (Text): type="hidden" , их тоже нужно передавать, даже если они пустые.
<input id="login" type="text" value="adress" name="Login"> Прямо так тегом и писать? curl_setopt($ch, CURLOPT_POSTFIELDS, array("<input id="login" type="text" value="adress" name="Login">" => "значение поля1", "поле2" => "значение поля2")); Ну и со вторым соответственно вот исходный html код форм: Код (Text): <tbody> <tr> <td class="login-form__td-label"> <label class="login-form__label" for="login">Имя</label> </td> <td> <input id="login" type="text" value="adress" name="Login"> </td> <td> <select class="login-form__select" name="Domain"> <option value="mail.ru">@mail.ru</option> <option selected="" value="inbox.ru">@inbox.ru</option> <option value="list.ru">@list.ru</option> <option value="bk.ru">@bk.ru</option> </select> </td> </tr> <tr> <td class="login-form__td-label"> <label class="login-form__label" for="password">Пароль</label> </td> <td> <div id="tooltipAuth_shell" class="tooltip" style="display: none;"> <div id="tooltipAuth_tail" class="tail"></div> <div class="ltc"></div> <div class="rtc"></div> <div class="ts"></div> <div class="inner"> <div class="rborder"> <div id="tooltipAuth_mess" class="mess"> </div> <div id="tooltipAuth_struter" class="struter"></div> </div> </div> <div class="lbc"></div> <div class="rbc"></div> <div class="bs"></div> </div> <input id="password" type="password" name="Password">
вы не внимательно читаете то, что я пишу - это во-первых, имя полю даёт параметр name="Login", значит так: "Login" => "значение поля Login", и так дальше... также не забудьте о скрытых полях и поле "Domain", которое может принимать следующие значения: mail.ru, inbox.ru, list.ru и т.д. могут быть также другие поля, необходимые для защиты от ботов, которые вычисляются с помощью сниффера либо и ещё раз:
demyan1 Спасибо с этим совсем разобрались! Вот остался последний вопрос прости те что довожу уже до банальности просто php учу только неделю. в том коде ошибок вроде нет. как мне теперь запросить нужную страницу и сохранить её в файл? по аналогу кода сверху? И всё на этом я от вас отстану. Спасибо что помогли ламеру! я вам очень признателен
...а в гугле слабо набрать "сохранить страницу в файл php"? нее так далеко вы не пойдёте, лень тому причина file_put_contents($_SERVER['DOCUMENT_ROOT'].'/file.txt',$home); $home-страница, которую вы получили в результате POST-запроса $_SERVER['DOCUMENT_ROOT'] - корневая директория сервера, может быть задана любая другая.
Нет как писать в файл то я знаю просто не дошло что в $home А скажите нормально то что после работа скрипта файл cookie.txt пустой? И мне после авторизации надо загрузить другую страницу где для неё ссылку писать? Добавлено спустя 2 минуты 49 секунд: Хотя ладно вопрос решён! - спасибо за помощь! Удачи вам в написание ваших программ
нет он не пустой если страница этого же сайта, тогда нужны те же самые куки, тогда так: Код (PHP): curl_setopt($curl, CURLOPT_COOKIESESSION, FALSE);