LinuxForum.Fans
Тема

Curl

Автор: skyinfo 9 сообщений 2112 просмотров
#234541

в программировании не мастак, навоял скрипт.
его цель: вбить трек номер на сайте http://www.russianpost.ru/resp_engine.aspx?Path=rp/servise/ru/home/postuslug/trackingpo, полученную информацию вырезать и вывесить у себя на сайте.

text
<form name="forma" method="post">
<td><input type="text" name="trk1" size="150" align="center" placeholder="Пример: YF123456789RU" /></td>
</form>
<?php
$trk1 = $_POST['trk1'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,'BarCode=$trk1&searchsign=1');
curl_setopt($ch, CURLOPT_URL,'http://www.russianpost.ru/resp_engine.aspx?Path=rp/servise/ru/home/postuslug/trackingpo');
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera 10.00');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$res = curl_exec($ch);
curl_close($ch);
$site = $res;
preg_match('|<table class="pagetext">(.*)</table>|Uis',$site,$ok);
echo "$ok";
?>

что то отказывается скрипт работать, может кто подскажет.

#234585

Не работает, значит упустил какие-то поля в форме.
Вот весь код формы с их сайта:

text
<form action="/resp_engine.aspx?Path=rp/servise/ru/home/postuslug/trackingpo" method="POST" name="F1">
<input type="hidden" value="" name="OP">
<input type="hidden" value="rp/servise/ru/home/postuslug/trackingpo" name="PATHCUR">
<input type="hidden" value="" name="PATHFROM">
<input type="hidden" value="" name="WHEREONOK">
<input type="hidden" value="" name="ASP">
<input type="hidden" value="" name="PARENTID">
<input type="hidden" value="" name="FORUMID">
<input type="hidden" value="" name="NEWSID">
<input type="hidden" value="" name="DFROM">
<input type="hidden" value="" name="DTO">
<input type="hidden" value="" name="CA">
<input type="hidden" value="03" name="CDAY">
<input type="hidden" value="03" name="CMONTH">
<input type="hidden" value="2012" name="CYEAR">
<input type="hidden" value="" name="NAVCURPAGE">
<input type="hidden" value="" name="SEARCHTEXT">

<input type="text" class="searchh" onkeydown="return sendSearch2OnEnter(event)" name="searchAdd" id="searchAdd"> <input type="hidden" value="RP/INDEX/RU/Home" name="PATHWEB" class="SERACHEDIT"> <input type="hidden" value="RP/INDEX/RU/Home/Search" name="PATHPAGE" class="SERACHEDIT"> <input type="hidden" name="search1" class="SERACHEDIT"> <input type="hidden" name="searchsign" id="searchsign"></p> <input type="hidden" value="" maxlength="14" size="14" name="entryBarCode" id="entryBarCode"><p> <input type="button" value="Найти" onclick="CheckInputCode();" name="searchbarcode"> </form>

Смотри сколько полей со значениями ты упустил. Наверняка они все должны быть иначе сервер не ответит. Будь внимательнее wink

#234587

skyinfo, вот как я делал: http://forum.drbatty.ru/viewtopic.php?f=77&t=5215
lightdesign, большинство полей действительно можно пропускать. Особенно это касается пустых полей. Не в этом дело скорее всего.

#234616
drBatty написал:
skyinfo, вот как я делал: http://forum.drbatty.ru/viewtopic.php?f=77&t=5215
lightdesign, большинство полей действительно можно пропускать. Особенно это касается пустых полей. Не в этом дело скорее всего.

Я кажется писал полей со значениями. По-моему есть разница между пустым полем и полем со значением smile

#234621
lightdesign написал:
Я кажется писал полей со значениями.

поля без значения тоже _могут_ играть важную роль. А поля со значениями _могут_ не играть роли.

lightdesign написал:
По-моему есть разница между пустым полем и полем со значением

по моему вы не уловили смысла моего поста...

#234622

да, смысл в том, что отправить форму "как браузер" можно, но вот только вебмастера почему-то против этого. Потому придумывают всякую ерунду. К тому же форма она для человека, и боту надо это учитывать.

#234700
text
<html>
        <head>
                <title>Трекер</title>
                <meta http-equiv="content-type" content="text/html;charset=utf-8">
                <link href="./styles.css" type="text/css" rel="stylesheet">
        </head>
        <body>

<form name="forma" method="post"> <td><input type="text" name="treck" size="150" align="center" placeholder="Пример: YF123456789RU" /></td> </form> <?php $treck = $_POST['treck']; $posts = "BarCode=$treck&&searchsign=1"; $url = "http://www.russianpost.ru/resp_engine.aspx?Path=rp/servise/ru/home/postuslug/trackingpo"; $br = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"; if( $ch = curl_init() ) { curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $posts); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT, $br); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $res = curl_exec($ch); curl_close($ch); } preg_match('|<table class="pagetext">(.*)</table>|',$res,$ok); print_r($ok); ?> </body> </html>



Теперь не пойму толи в "регулярке" дело, толи в выводе через функцию "print_r" > т.е выводяться не нужные array и отформатированный текст.

#234706
skyinfo написал:
Теперь не пойму толи в "регулярке" дело, толи в выводе через функцию "print_r" > т.е выводяться не нужные array и отформатированный текст.

print_r это отладочная функция, она всегда array( [0] => выводит. Используйте простые функции echo в цикле foreach.

#234713
skyinfo написал:
толи в "регулярке"
skyinfo написал:
preg_match('|<table class="pagetext">(.*)</table>|',$res,$ok);

1. preg_math это функция поиска совпадения, для замены есть preg_replace
2. (.*) поменяйте на (.*?)
да, ещё используйте модификаторы multiline(многострочность) и case sensitive (независимость от регистра). <TABLE> тоже допустимо.

Войдите или зарегистрируйтесь, чтобы ответить.