Помощник
|
cURL парсинг статистики, с авторизацией (не HTTP) |
n1tr1k
|
Сообщение
#1
|
||
|
|
||
|
|||
sakhseo |
11.9.2013, 22:03;
Ответить: sakhseo
Сообщение
#2
|
|
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. |
|
|
n1tr1k
|
Сообщение
#3
|
|
sakhseo, сделал все по пунктам, получаю следующее: "411 Length Required". error_reporting жалуется на массив, который в postfields.
Попробовал сделать по-своему, а именно: "login=test&password=12345", так снова пустая переменная получается. Где-то косяк... В cookie.txt записывается информация: "loadpays.com FALSE / FALSE 0 PHPSESSID dbmn2m0eh8vkg232d15bujuq03" -------------------- |
|
|
sakhseo |
12.9.2013, 6:10;
Ответить: sakhseo
Сообщение
#4
|
|
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. |
|
|
Vladimir-AWM |
12.9.2013, 7:02;
Ответить: Vladimir-AWM
Сообщение
#5
|
|
ТС, я все таки склоняюсь к тому что не работает на хостинге опция curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);, добавь в свой первый код это:
curl_setopt($ch, CURLOPT_HEADER, 1); и посмотри что в заголовке от сервака приходит. Думаю что будет 3xx редирект. -------------------- |
|
|
sakhseo |
12.9.2013, 8:42;
Ответить: sakhseo
Сообщение
#6
|
|
Держи, на тот случай если 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 |
|
|
n1tr1k
|
Сообщение
#7
|
|
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 ‹
-------------------- |
|
|
sakhseo |
12.9.2013, 13:42;
Ответить: sakhseo
Сообщение
#8
|
|
n1tr1k, В последнем комментарии два варианта, оба без CURLOPT_FOLLOWLOCATION
Только что проверил, оба работают. Проверяйте их с error_reporting(E_ALL | E_STRICT); ini_set('display_errors', true); |
|
|
n1tr1k
|
Сообщение
#9
|
|
sakhseo, все по инструкции, получаю:
Notice: Undefined index: redirect_url in...
Notice: Undefined index: redirect_url in... -------------------- |
|
|
sakhseo |
12.9.2013, 15:26;
Ответить: sakhseo
Сообщение
#10
|
|
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'); |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Трафик в Телеграм (рассылка, инвайт, парсинг) | 9 | gelt | 2847 | 8.4.2024, 15:28 автор: gelt |
|
ВКонтакте: полный комплекс услуг (массовая рассылка по стенам групп и в ЛС), парсинг, лайки, инвайты Гарантия самой низкой цены |
4 | MaxChemist | 1917 | 1.1.2023, 13:23 автор: MaxChemist |
|
Сбор баз, парсинг информации, постинг, автоматизация Качественно и в срок |
21 | SEOMR | 20838 | 22.7.2022, 15:10 автор: iodjin |
|
Парсинг | 0 | alnsam | 855 | 20.7.2022, 16:25 автор: alnsam |
|
Требуется парсинг поисковой выдачи | 0 | WoWeb | 870 | 5.7.2022, 16:31 автор: WoWeb |
Текстовая версия | Сейчас: 19.4.2024, 6:21 |