PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 3
Dein Отправлено: 23 Июня, 2014 - 20:56:11 • Тема: Парсинг html • Форум: Регулярные выражения

Ответов: 1
Просмотров: 131
Добрый день.

Пишу сейчас скрипт, который парсит страницы блога и вытаскивает из них посты. Блог разбит по страницам, на каждой странице размещено по три поста. Структура страницы приблизительно следующая:

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <html>
  3. <body>
  4.     <header>...</header>
  5.     <h1>Заголовок поста #1</h1>
  6.     <p>Первый параграф поста</p>
  7.     <p>Второй параграф поста</p>
  8.     <h1>Заголовок поста #2</h1>
  9.     <p>Первый параграф поста</p>
  10.     <p>Второй параграф поста</p>
  11.     <h1>Заголовок поста #3</h1>
  12.     <p>Первый параграф поста</p>
  13.     <p>Второй параграф поста</p>
  14.     <footer>...</footer>
  15. </body>
  16. </html>
  17.  


Вот такая вот, в общем, плоская структура (я бы, например, посты поместил в <article>...</article> или какой-то другой контейнер).

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

Подскажите, пожалуйста, выражение для PCRE, которое позволит получить код постов вместе с их заголовками.

Заранее спасибо Улыбка
Dein Отправлено: 09 Июня, 2014 - 11:58:48 • Тема: Curl+https: не работает с некоторыми ресурсами • Форум: Работа с сетью

Ответов: 2
Просмотров: 2820
OrmaJever пишет:
добавьте 2 строки
PHP:
скопировать код в буфер обмена
  1. curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, 0);
  2. curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, 0);

Добавил, но, к сожалению, всё то же самое - сервер на первом хостинге сбрасывает соединение, а на втором всё замечательно.

Вообще, по идее, если у Curl проблемы с сертификатом, он просто должен возвратить ошибку и продолжить выполнения PHP-скрипта.

Самое интересное, что данные о запросе клиентом данного php-скрипта вообще не заносятся в логи Апача, как будто и не было никаких запросов к нему. Ведь если случается какая-то фигня на стороне сервера при выполнении curl_exec, Апач должен добавить в логи хотя бы строчку о попытке доступа к странице и результате с каким-нибудь кодом из серии 5xx.
Dein Отправлено: 09 Июня, 2014 - 10:10:45 • Тема: Curl+https: не работает с некоторыми ресурсами • Форум: Работа с сетью

Ответов: 2
Просмотров: 2820
Привет, народ!

В общем, ситуация такая: понадобилось мне написать скрипт, который отображает на сайте список твитов. Как известно, у Twitter доступ только по OAuth, так что нужно на PHP писать такой себе "шлюз", который авторизуется у Twitter по HTTPS, забирает список твитов и отдаёт их в ajax-запросе, собственно, самой странице, на которой этот список нужно разместить.

Для всего этого используется PHP-библиотека twitteroath:
https://github[dot]com/abraham/twitteroauth

Проблема заключается в том, что после выполнения curl_exec в скрипте twitteroauth сервер на моём хостинге сбрасывает соединение, и всё... тишина, никакого тебе перехвата ошибок curl, ничего.

Залил я эти скрипты на другой свой сайт (размещён в другом аккаунте у того же провайдера), и - о чудо! - всё заработало!

Нашёл я два простеньких скрипта для тестирования работы Curl с HTTPS:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //Filename: curl_test.php
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_TIMEOUT, 30);
  5. curl_setopt($ch, CURLOPT_HEADER, 1);
  6. curl_setopt($ch, CURLOPT_VERBOSE, 1);
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  8.  
  9. //Uncomment this for Windows.
  10. //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  11.  
  12. curl_setopt($ch, CURLOPT_URL, "https://www.stanford.edu/group/idg/leland/samples/secure/test.html");
  13. $result = curl_exec($ch);
  14. echo '<pre>';
  15. echo '</pre>';
  16. echo 'Errors: ' . curl_errno($ch) . ' ' . curl_error($ch) . '<br><br>';
  17. curl_close ($ch);
  18. echo $result . 'EOF';
  19. ?>


и

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function curl_get_file_contents($URL) {
  3.        $c = curl_init();      
  4.        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  5.        curl_setopt($c, CURLOPT_URL, $URL);
  6.        $contents = curl_exec($c);
  7.        curl_close($c);
  8.        if ($contents) return $contents;
  9.            else return FALSE;
  10.    }
  11. echo curl_get_file_contents("http://yandex.ru");
  12.  
  13. ?>


Так вот, оказалось, что второй скрипт (который обращается к Яндексу) стабильно работает на обоих сайтах, а вот первый скрипт работает только на втором (как, собственно и twitteroath).
Т.е. совершенно очевидно, что проблема с работой Curl и HTTPS.

Пожалуйста, подскажите, что может быть не то с первым хостингом? Или что я неправильно делаю?

Заранее, ОГРОМНЕЙШЕЕ СПАСИБО за помощь!

P.S.: Сранивал php_info() - версия PHP одна и та же, версия OpenSSL тоже. А вот версии Curl отличаются.
На первом хостинге:
CODE (htmlphp):
скопировать код в буфер обмена
  1. libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2


На втором:
CODE (htmlphp):
скопировать код в буфер обмена
  1. libcurl/7.24.0 OpenSSL/1.0.0 zlib/1.2.3 libidn/1.18

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB