Помогите с парсингом (cURL + phpQuery)

I
На сайте с 30.07.2012
Offline
2
4033

Здравствуйте,

помогите найти ошибку, самое интересное, что когда писал код на локалном хосте, всё было норм, перенёс на хостинг, перестало всё работать, сейчас и на локальном хосте не работает...

вот код:

<?php

if ($_REQUEST['id'] != NULL)
{
$url = "http://www.russianpost.ru/resp_engine.aspx?Path=rp/servise/ru/home/postuslug/trackingpo";
$uagent = $_SERVER[REMOTE_ADDR];
$codes = $_REQUEST['id'];
$ch = curl_init( );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $uagent);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "&BarCode=".$codes);

$res = curl_exec($ch);
echo $res;
if (!$res)
{
echo curl_error($ch) . "(" . curl_errno($ch) . ")";
}
else
require (dirname(__FILE__).'/phpQuery/phpQuery.php');
$document = phpQuery::newDocument($res);
$hentry = $document->find('table.pagetext');
foreach ($hentry as $el) {
$pq = pq($el);
}
echo $hentry;
curl_close($ch);
}
?>

В общем мне нужно, что бы на страницу $url отправлялся post запрос, а ответ показал мне

для теста можно использовать например этот номер: EA149048430RU.

Помогите пожалуйста, уже не первый день пытаюсь сделать сам...

---------- Добавлено 06.09.2012 в 14:19 ----------

***91; и ***93; — это квадратные скобки, почему-то меняются на это... ([])

Fizigr
На сайте с 10.04.2007
Offline
42
#1

А почта РФ разве не закрыла доступ к этому сервису? Я слушал, что у них только федеральные клиенты могут получить доступ. А все остальные только на их сайте просматривать могут. Или я не понял чего-то?

Приглашаю в SeoWizard (http://www.seowizard.ru/r.DfNrcSfITj.php). Магазин посуды (http://don-art.ru/). Ручная работа. Семикаракорская керамика.
I
На сайте с 30.07.2012
Offline
2
#2
Fizigr:
А почта РФ разве не закрыла доступ к этому сервису? Я слушал, что у них только федеральные клиенты могут получить доступ. А все остальные только на их сайте просматривать могут. Или я не понял чего-то?

поэтому и делаю парсинг...

prishlo.li - там это так и сделано.

M
На сайте с 12.11.2005
Offline
122
#3

ironkiss, смотрите в настройках php есть ли у Вас curl вообще, далее - смотрите, что Вам возвращает этот curl, если возвращает то, что надо, то смотрите уже как работает phpquery, либо проверяйте отсылаемые через curl данные.

Удачи!

I
На сайте с 30.07.2012
Offline
2
#4
modelist:
ironkiss, смотрите в настройках php есть ли у Вас curl вообще, далее - смотрите, что Вам возвращает этот curl, если возвращает то, что надо, то смотрите уже как работает phpquery, либо проверяйте отсылаемые через curl данные.
Удачи!

1. Да

2. он ни чего не возвращает, вообще ни чего не происходит, вернее происходит постоянная отправка, страница мигает, как при перезагрузке. Поэтому и стоит после cURL echo $res; хотел посмотреть, что приходит в ответ.

3. Подскажите как проверить, что через cURL отсылается.

Fizigr
На сайте с 10.04.2007
Offline
42
#5

У меня в ответ приходит страница почты по запрашиваемому адресу, где нужно вводить почтовый идентификатор. То есть, как я понимаю, результата поиска нет на этой странице, поэтому $hentry = $document->find('table.pagetext'); ничего и не возвращает... Как добиться результата?

---------- Добавлено 06.09.2012 в 19:02 ----------

ironkiss, я решил Вашу задачку. Дело в количестве передаваемой информации в пост запросе. Смотрите внимательно на то, какие поля содержит форма. Там есть проверка введенного номера. Если номер удовлетворяет условиям, то яваскрипт добавляет в одно из полей значение "1" и только потом происходит отправка формы на сервер. Без этого сервер ничего не отдает.

Спасибо за идею, попробую реализовать у себя.

I
На сайте с 30.07.2012
Offline
2
#6

Fizigr, да, я заметил, что после проверки добавляется в скрытое поле "1", я передаю со всеми этими параметрами и скрытыми полями:

OP=&PATHCUR=rp/servise/ru/home/postuslug/trackingpo&PATHFROM=&WHEREONOK=&ASP=&PARENTID=&FORUMID=&NEWSID=&DFROM=&DTO=&CA=&CDAY=07&CMONTH=09&CYEAR=2012&NAVCURPAGE=&SEARCHTEXT=&searchAdd=&PATHWEB=RP/INDEX/RU/Home&PATHPAGE=RP/INDEX/RU/Home/Search&search1=&BarCode=EA149048430RU&searchsign=1&entryBarCode=

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

Это бред какой-то

I
На сайте с 30.07.2012
Offline
2
#7

Кстати, зачастую возвращается форма со скрытым input в котором указан параметр key с постоянно разными числами и если его добавить к отправляемым данным, то через раз срабатывает... короче я запутался в конец.

OP=&PATHCUR=rp%2Fservise%2Fru%2Fhome%2Fpostuslug%2Ftrackingpo&PATHFROM=&WHEREONOK=&ASP=&PARENTID=&FORUMID=&NEWSID=&DFROM=&DTO=&CA=&CDAY=26&CMONTH=04&CYEAR=2012&NAVCURPAGE=&SEARCHTEXT=&searchAdd=&PATHWEB=RP%2FINDEX%2FRU%2FHome&PATHPAGE=RP%2FINDEX%2FRU%2FHome%2FSearch&search1=&searchsign=1&entryBarCode=&key=585589&BarCode=EA149048430RU

Fizigr
На сайте с 10.04.2007
Offline
42
#8

ironkiss, все верно. Так и у меня работает и эту форму со скрытым инпутом заметил. Я не силен в phpQuery. Подскажи код, как ты значение key вытащил.

Я так понимаю, потом делаешь повторный коннект, если появляется скрытая форма?

Fizigr
На сайте с 10.04.2007
Offline
42
#9

В общем, я нашел, как получить и отправить код. Но и тут вопросы появляются. Итог - данные получаются. Но есть проблема. Код не всегда подходит, поэтому получается у скрипта только через несколько заходов данные забрать, что влияет на время исполнения. Ну и само время даже если с ходу без key то долго, несколько секунд. Посмотрел на prishlo.li - очень быстро... Почему?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий