X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> cURL парсинг статистики, с авторизацией (не HTTP)
n1tr1k
n1tr1k
Topic Starter сообщение 11.9.2013, 21:39; Ответить: n1tr1k
Сообщение #1


Любитель BMW и бекона :)
*****

Группа: Active User
Сообщений: 767
Регистрация: 17.1.2009
Из: Saint-Petersburg
Поблагодарили: 266 раз
Репутация:   65  


Здравствуйте, уважаемые форумчане!

Захотелось написать небольшой скрипт, который будет собирать статистику со всех используемых ПП для отслеживания дохода. Для чего? Чтобы зайти на 1 сайт и увидеть доход за день, а не ходить по куче ссылок и в уме складывать суммы.

Собственно, стал делать через cURL. Код:

<?php

$url="http://loadpays.com/?p=login";
$cookie_file="cookie.txt";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt ($ch, CURLOPT_REFERER, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, "login=test&password=12345");
curl_setopt ($ch, CURLOPT_POST, 1);

$result = curl_exec ($ch);

echo $result;

curl_close($ch);

?>


POST-данные отправляются, но после выполнения переменная result ничего не содержит, а хотелось бы видеть страницу ПП для дальнейшей выборки информации оттуда.

В чем косяк?


С уважением, n1tr1k


--------------------
ICQ: 494-420
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sakhseo
sakhseo
сообщение 11.9.2013, 22:03; Ответить: sakhseo
Сообщение #2


Новичок
*

Группа: User
Сообщений: 18
Регистрация: 22.6.2012
Из: Южно-Сахалинск
Поблагодарили: 11 раз
Репутация:   3  


n1tr1k,
1. Включить вывод ошибок.
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', true);

2. Для cookie.txt указать полный путь.
3. CURLOPT_FOLLOWLOCATION может не работать.
4. заголовки
$httpheader = array(
  'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1',
  'User-Agent: Opera/9.80',
  'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8',
  'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1',
  'Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0', // если это, то потом   if($temp = @gzinflate(substr($result, 10))) $result = $temp;
  'Referer: '.$referer,
  'TE: deflate, gzip, chunked, identity, trailers',
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);

5.
curl_setopt ($ch, CURLOPT_POSTFIELDS, array('login' => 'test', 'pass' => 'test')); // всегда так делаю.

6. POST надо отправлять в нужной кодировке. Если к примеру логин на русском. Но тогда бы хоть что то вывело..
7.
if(curl_errno($ch)){
  echo curl_errno($ch).', '.curl_error($ch);
}

Исправляй, а там посмотрим))) Можно не всё сразу)) Просто привык на верочку уже)))
В общем вывод ошибок и пункт 7.


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
n1tr1k
n1tr1k
Topic Starter сообщение 12.9.2013, 1:38; Ответить: n1tr1k
Сообщение #3


Любитель BMW и бекона :)
*****

Группа: Active User
Сообщений: 767
Регистрация: 17.1.2009
Из: Saint-Petersburg
Поблагодарили: 266 раз
Репутация:   65  


sakhseo, сделал все по пунктам, получаю следующее: "411 Length Required". error_reporting жалуется на массив, который в postfields.

Попробовал сделать по-своему, а именно: "login=test&password=12345", так снова пустая переменная получается.

Где-то косяк...

В cookie.txt записывается информация: "loadpays.com FALSE / FALSE 0 PHPSESSID dbmn2m0eh8vkg232d15bujuq03"


--------------------
ICQ: 494-420
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sakhseo
sakhseo
сообщение 12.9.2013, 6:10; Ответить: sakhseo
Сообщение #4


Новичок
*

Группа: User
Сообщений: 18
Регистрация: 22.6.2012
Из: Южно-Сахалинск
Поблагодарили: 11 раз
Репутация:   3  


n1tr1k, К сожалению к тому моменту лёг спать.
Сейчас решил зарегаться. Пока регался, так до конца регистрацию и не прошёл. Пустая страница.
Разок промелькнуло что логин или почта занята. Начал авторизироваться, так и не смог. То пустая страница, то ошибка базы данных. Это всё через браузер.
В общем чуть позже попробую. Глючный сервис какой то.

<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', true);

define('MY_ROOT', str_replace('\\', '/', dirname(__FILE__)));

$httpheader = array(
  'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1',
  'User-Agent: Opera/9.80',
  'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8',
  'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1',
  'Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0',
  'Referer: http://loadpays.com/',
  'TE: deflate, gzip, chunked, identity, trailers',
);
$ch = curl_init("http://loadpays.com/?p=login");
curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, MY_ROOT."/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, MY_ROOT."/cookie.txt");
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=xxx&password=yyy");
curl_setopt($ch, CURLOPT_POST, 1);
$result = curl_exec($ch);
if(curl_errno($ch)){
  die(curl_errno($ch).', '.curl_error($ch));
}
curl_close($ch);
if($temp = @gzinflate(substr($result, 10))) $result = $temp;
echo $result;
?>

Работает всё. Может у них глючило. Собственно работал и простой код, без заголовков, но только с cookie.


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Vladimir-AWM
Vladimir-AWM
сообщение 12.9.2013, 7:02; Ответить: Vladimir-AWM
Сообщение #5


Участник
***

Группа: User
Сообщений: 236
Регистрация: 7.2.2010
Из: Челябинск
Поблагодарили: 62 раза
Репутация:   16  


ТС, я все таки склоняюсь к тому что не работает на хостинге опция curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);, добавь в свой первый код это:

curl_setopt($ch, CURLOPT_HEADER, 1);


и посмотри что в заголовке от сервака приходит. Думаю что будет 3xx редирект.


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sakhseo
sakhseo
сообщение 12.9.2013, 8:42; Ответить: sakhseo
Сообщение #6


Новичок
*

Группа: User
Сообщений: 18
Регистрация: 22.6.2012
Из: Южно-Сахалинск
Поблагодарили: 11 раз
Репутация:   3  


Держи, на тот случай если CURLOPT_FOLLOWLOCATION не работает
Написал ещё с мультикурлом, но где используется один поток и подгружается ещё, если идёт перенаправление, но решил что будет перебор))
<?php
function get_curl($url, $postdata = '', $max_redirect = 7){
  if(!$max_redirect) return;
  $max_redirect--;
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_TIMEOUT, 60);  
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_COOKIEJAR, MY_ROOT."/cookie.txt");
  curl_setopt($ch, CURLOPT_COOKIEFILE, MY_ROOT."/cookie.txt");
  if($postdata){
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt($ch, CURLOPT_POST, 1);
  }
  $result = curl_exec($ch);
  if(curl_errno($ch)){
    die(curl_errno($ch).', '.curl_error($ch));
  }
  $info = curl_getinfo($ch);
  curl_close($ch);
  if($info['redirect_url']) return get_curl($info['redirect_url'], null, $max_redirect);
  return $result;
}
echo get_curl('http://loadpays.com/?p=login', 'login=xxx&password=yyy', 7);

function get_loadpays($url, $postdata = ''){
  $max_redirect = 7;
  $result = '';
  for(; $max_redirect >= 0; $max_redirect--){
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR, MY_ROOT."/cookie.txt");
    curl_setopt($ch, CURLOPT_COOKIEFILE, MY_ROOT."/cookie.txt");
    if($postdata){
      curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
      curl_setopt($ch, CURLOPT_POST, 1);
    }
    $result = curl_exec($ch);
    if(curl_errno($ch)){
      die(curl_errno($ch).', '.curl_error($ch));
    }
    $info = curl_getinfo($ch);
    if(!$info['redirect_url']) break;
    $url = $info['redirect_url'];
    $postdata = '';
  }
  curl_close($ch);
  return $result;
}
echo get_loadpays('http://loadpays.com/?p=login', 'login=xxx&password=yyy');
?>

Если захочешь сжатые страницы принимать, то дополнишь сам, выше есть как.

Сообщение отредактировал sakhseo - 12.9.2013, 8:54


Поблагодарили: (2)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
n1tr1k
n1tr1k
Topic Starter сообщение 12.9.2013, 13:29; Ответить: n1tr1k
Сообщение #7


Любитель BMW и бекона :)
*****

Группа: Active User
Сообщений: 767
Регистрация: 17.1.2009
Из: Saint-Petersburg
Поблагодарили: 266 раз
Репутация:   65  


sakhseo, крайний вариант выводит пустую страницу, как и до этого. Промежуточный вариант жалуется на followlocation:

Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in...


Vladimir-AWM, как Вы и сказали, проблемы с followlocation, получаем следующее:

HTTP/1.1 302 Found Server: nginx/1.2.3 Date: Thu, 12 Sep 2013 09:27:49 GMT Content-Type: text/html Content-Length: 20 Connection: keep-alive X-Powered-By: PHP/5.4.6 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Location: /member/ Content-Encoding: gzip Vary: Accept-Encoding ‹


--------------------
ICQ: 494-420
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sakhseo
sakhseo
сообщение 12.9.2013, 13:42; Ответить: sakhseo
Сообщение #8


Новичок
*

Группа: User
Сообщений: 18
Регистрация: 22.6.2012
Из: Южно-Сахалинск
Поблагодарили: 11 раз
Репутация:   3  


n1tr1k, В последнем комментарии два варианта, оба без CURLOPT_FOLLOWLOCATION
Только что проверил, оба работают.
Проверяйте их с
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', true);
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
n1tr1k
n1tr1k
Topic Starter сообщение 12.9.2013, 14:43; Ответить: n1tr1k
Сообщение #9


Любитель BMW и бекона :)
*****

Группа: Active User
Сообщений: 767
Регистрация: 17.1.2009
Из: Saint-Petersburg
Поблагодарили: 266 раз
Репутация:   65  


sakhseo, все по инструкции, получаю:

Notice: Undefined index: redirect_url in...

Notice: Undefined index: redirect_url in...


--------------------
ICQ: 494-420
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sakhseo
sakhseo
сообщение 12.9.2013, 15:26; Ответить: sakhseo
Сообщение #10


Новичок
*

Группа: User
Сообщений: 18
Регистрация: 22.6.2012
Из: Южно-Сахалинск
Поблагодарили: 11 раз
Репутация:   3  


n1tr1k, ясно. Сейчас кофейку и другой вариант кину. Будем брать урл из заголовков.

function get_loadpays($url, $postdata = ''){
  $max_redirect = 7;
  $result = '';
  $ch = curl_init();
  for(; $max_redirect >= 0; $max_redirect--){
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR, MY_ROOT."/cookie.txt");
    curl_setopt($ch, CURLOPT_COOKIEFILE, MY_ROOT."/cookie.txt");
    if($postdata){
      curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
      curl_setopt($ch, CURLOPT_POST, 1);
    }
    $result = curl_exec($ch);
    if(curl_errno($ch)){
      die(curl_errno($ch).', '.curl_error($ch));
    }
    $temp   = explode("\r\n\r\n", $result);
    $header = array_shift($temp);
    $result = implode("\r\n\r\n", $temp);
    if(preg_match('/Location:(.*?)\n/', $header, $matches)){
      $postdata = '';
      $parse_url = parse_url($url);
      $url = $parse_url['scheme'].'://'.$parse_url['host'].trim($matches[1]);
    }
    else break;
  }
  curl_close($ch);
  return $result;
}
echo get_loadpays('http://loadpays.com/?p=login', 'login=zzz&password=xxx');


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Сбор баз, парсинг информации, постинг, автоматизация
Качественно и в срок
7 SEOMR 3086 18.11.2017, 20:48
автор: LoneDigger
Открытая тема (нет новых ответов) Ядро Пузатское | Составление семантики: парсинг, чистка, группировка, тз
Составление семантики: парсинг, чистка, группировка, тз
0 msbot 444 5.11.2017, 12:00
автор: msbot
Открытая тема (нет новых ответов) Кодинг, парсинг, автоматизация задач, импорт, разработка и доработка сайтов
Экономлю время!
8 a10ne 1228 2.11.2017, 14:26
автор: a10ne
Открытая тема (нет новых ответов) Нужен парсинг емайлов пользователей ВК
Нужна база мыл пользователей
0 PostBrigada 486 31.8.2017, 21:56
автор: PostBrigada
Открытая тема (нет новых ответов) Нужен парсинг данных
ориганизаций
2 tube 556 16.8.2017, 16:00
автор: SEOMR


 



RSS Текстовая версия Сейчас: 17.12.2017, 4:56
Дизайн