Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
 [PHP] Налаживание калькулятора  [new]
47911
Member

Откуда: Там чудеса, там леший бродит.
Сообщений: 43
Вообщем, я увидел: https://avtoperevozki.incom-cargo.com/po_rossii/
И решил это дело перенести к себе на сайт. Покопавшись в нём, я перенёс код:
+
<div class="interactive uniq">
  <p class="direction">Прайс на автоперевозки по России</p>
  <div class="input-block jf">
    <div class="left-block">
      <label for="in">Откуда:</label><br>
      <input type="text" name="in" value="Кемерово" autocomplete="off" class="ac_input">
    </div>
    <div class="left-block">
      <label for="out">Куда:</label><br>
      <div class="input-stack">
        <input type="text" name="out-1" value="Абакан" autocomplete="off" class="ac_input">
      </div>
      <div class="add-direction">
        <div class="plus-btn"></div>
        <div class="add-link">
          <a href="javascript:void(0);" class="add-click" onclick="addClick(); return false;">Выбрать дополнительное<br> направление</a>
        </div>
      </div>
    </div>
    <div class="left-block btn-block">
      <button class="btn btn2" onclick="ajaxCall(); chaserFunc(); yaCounter12136018.reachGoal('prices-avto-rus');  return false;">Показать цены</button>
    </div>
  </div>
  <div class="table-block">
    <table class="responsive">
      <thead>
        <tr><th class="border-none">Из Кемерово в:</th>
        <th>"Газель"<br> 1,5 тонны</th>
        <th>"Бычок"<br> 3 тонны</th>
        <th>5 тонн</th>
        <th>10 тонн</th>
        <th>20 тонн<br> тентованный</th>
        <th>20 тонн<br> изотермический</th>
        <th class="border-none">20 тонн<br> рефрижератор</th>
      </tr></thead>
                    <!--base:28000-->
                  <tbody><tr>
            <td>Абакан</td>
            <td>5500</td>
            <td>8500</td>
            <td>10000</td>
            <td>17000</td>
            <td>28000</td>
            <td>31000</td>
            <td>34000</td>
          </tr>

                    <!--base:141000-->
                  <tr>
            <td>Актау</td>
            <td>27000</td>
            <td>41000</td>
            <td>49500</td>
            <td>85000</td>
            <td>141000</td>
            <td>155500</td>
            <td>169500</td>
          </tr>

                    <!--base:72000-->
                  <tr>
            <td>Актобе</td>
            <td>14000</td>
            <td>21000</td>
            <td>25500</td>
            <td>43500</td>
            <td>72000</td>
            <td>79500</td>
            <td>86500</td>
          </tr>

            <!--Array
(
    [ID] => 1617
    [~ID] => 1617
    [PROPERTY_REGION_CAPITAL_NAME] => Алма-Ата
    [~PROPERTY_REGION_CAPITAL_NAME] => Алма-Ата
    [SORT] => 500
    [~SORT] => 500
)
-->        <!--base:0-->
                  <tr>
            <td>Алма-Ата</td>
            <td> по<br>запросу </td>
            <td> по<br>запросу </td>
            <td> по<br>запросу </td>
            <td> по<br>запросу </td>
            <td> по<br>запросу </td>
            <td> по<br>запросу </td>
            <td> по<br>запросу </td>
          </tr>

            <!--Array
(
    [ID] => 434
    [~ID] => 434
    [PROPERTY_REGION_CAPITAL_NAME] => Псков
    [~PROPERTY_REGION_CAPITAL_NAME] => Псков
    [SORT] => 500
    [~SORT] => 500
)
-->        <!--base:88000-->
                  <tr>
            <td>Алма-Аты</td>
            <td>17000</td>
            <td>26000</td>
            <td>31000</td>
            <td>53000</td>
            <td>88000</td>
            <td>97000</td>
            <td>106000</td>
          </tr>

                    <!--base:104000-->
                  <tr>
            <td>Алматы</td>
            <td>20000</td>
            <td>30500</td>
            <td>36500</td>
            <td>62500</td>
            <td>104000</td>
            <td>114500</td>
            <td>125000</td>
          </tr>

            <!--Array
(
    [ID] => 481
    [~ID] => 481
    [PROPERTY_REGION_CAPITAL_NAME] => Анадырь
    [~PROPERTY_REGION_CAPITAL_NAME] => Анадырь
    [SORT] => 500
    [~SORT] => 500
)
-->        <!--base:0-->
                  <tr>
            <td>Анадырь</td>
            <td> по<br>запросу </td>
            <td> по<br>запросу </td>
            <td> по<br>запросу </td>
            <td> по<br>запросу </td>
            <td> по<br>запросу </td>
            <td> по<br>запросу </td>
            <td> по<br>запросу </td>
          </tr>

                    <!--base:99000-->
                  <tr>
            <td>Архангельск</td>
            <td>19000</td>
            <td>29000</td>
            <td>35000</td>
            <td>59500</td>
            <td>99000</td>
            <td>109000</td>
            <td>119000</td>
          </tr>

                    <!--base:63000-->
                  <tr>
            <td>Астана</td>
            <td>12000</td>
            <td>18500</td>
            <td>22500</td>
            <td>38000</td>
            <td>63000</td>
            <td>69500</td>
            <td>76000</td>
          </tr>

                    <!--base:86000-->
                  <tr>
            <td>Астрахань</td>
            <td>16500</td>
            <td>25000</td>
            <td>30500</td>
            <td>52000</td>
            <td>86000</td>
            <td>95000</td>
            <td>103500</td>
          </tr>

          </tbody></table>
  </div>
  <p class="int-gruz">Стоимость услуг одного грузчика - <span class="bold">200 руб/час</span></p>
</div>







<link href="/111/adaptive.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript" src="/111/jquery.fancybox-1.3.4.pack.js"></script>
        <script type="text/javascript" src="/111/jquery.mousewheel-3.0.4.pack.js"></script>
        <script type="text/javascript" src="/111/chaser.js"></script>
        <script type="text/javascript" src="/111/main.js"></script>
        <script type="text/javascript" src="/111/cusel-min-2.3.1.js"></script>
<script type="text/javascript" src="/111/autocomplete.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
  jQuery(".fancybox").fancybox();
});

  jQuery(document).ready(function(){
    jQuery('.interactive.uniq input[name=in], .interactive.uniq input[name=out-1]').focus(function (){
      jQuery(this).val('');
    });

    jQuery('.interactive.uniq input[name=in]').autocomplete("/111/autocomplete.php", {
      delay:10,
      minChars:1,
      matchSubset:1,
      autoFill:true,
      matchContains:1,
      cacheLength:10,
      selectFirst:true,
      // formatItem:liFormat,
      maxItemsToShow:10,
      // onItemSelect:selectItem
    });
    jQuery('.interactive.uniq .input-stack input[name=out-1]').autocomplete("/111/autocomplete.php", {
      delay:10,
      minChars:1,
      matchSubset:1,
      autoFill:true,
      matchContains:1,
      cacheLength:10,
      selectFirst:true,
      // formatItem:liFormat,
      maxItemsToShow:10,
      // onItemSelect:selectItem
    });
  });

  function addClick() {
    var cnt = jQuery('.input-stack input').length;
    var height = jQuery('.input-block').height();

    if(cnt <= 10) {
      cntNew = cnt + 1;
      html = '<input type="text" name="out-' + cntNew + '" value="" />';
      jQuery('.input-stack').append(html);
      jQuery('.input-block').css({'height' : height + 26 + 'px'});
    }

    if (cnt == 9) {
      jQuery('.add-direction').hide();
      jQuery('.input-block').css({'height' : '300px'});
    }

    jQuery('.input-stack input[name=out-' + cntNew + ']').autocomplete("/111/autocomplete.php", {
      delay:10,
      minChars:1,
      matchSubset:1,
      autoFill:true,
      matchContains:1,
      cacheLength:10,
      selectFirst:true,
      // formatItem:liFormat,
      maxItemsToShow:10,
      // onItemSelect:selectItem
    });

    return true;
  }

  function ajaxCall() {
      var strParams = '';
      var cntLenght = jQuery('.interactive input').length;
      var sep = '&';

	  var request = {};
      jQuery('.interactive.uniq input').each(function(i) {
          if (jQuery(this).val() != '') {
              strParams = strParams + jQuery(this).attr('name') + '=' + jQuery(this).val() + sep;
			  request[jQuery(this).attr('name')] = jQuery(this).val();
          }
      });
	  //document.write(strParams);
	  var strParams1 = strParams;
      strParams = strParams.substr(0, (strParams.length - 1));
	  document.getElementById("nameid").innerHTML=strParams1+'<br/>'+strParams;
	  //document.write(strParams);

      if (strParams != '') {
          jQuery.ajax({
              type: "POST",
              url: '/111/ajaxcall.php',
              //data: strParams,
              data: request,
              success: function (html){
                  jQuery('.interactive .table-block table').remove();
                  jQuery('.interactive .table-block').html(html);

                  if (typeof(smartUpdateTables) === 'function') {
                      smartUpdateTables();
                  }
              }
          });
      }
  }
  var point;
  var showChaser = false;
  function chaserFunc() {
  /*
    if (showChaser == false) {
      clearTimeout(point);
      point = setTimeout(function(){
        chWidget.showWidget();
        showChaser = true;
      }, 5000);
    }
	*/
  }
</script>
<p id="nameid">Сейчас тут появится текст</p> <- Для отладки

Сделал файлы *.php которые делают запрос. Например:
/111/ajaxcall.php:
+
$ADPEC = 'https://avtoperevozki.incom-cargo.com/include/ajaxcall.php';
MACCuB_B_FAiL($_POST,'Файл2_ПОСТ.txt');
$CTPOKA0 = "";
foreach($_POST as $key => $value){
	$CTPOKA0 .= "&$key=$value";
}
//foreach($_POST as $k=>$z){$CTPOKA0 .= '&'.$k.'='.($z);}
//foreach($_POST as $k=>$z){$CTPOKA0 .= '&'.$k.'='.urlencode($z);}
if(mb_strlen($CTPOKA0)>1){$CTPOKA0 = mb_substr($CTPOKA0,1);}
$OTBET = ZAnPOC($ADPEC, $CTPOKA0);

echo $OTBET['Содержимое'];
$OTBET['Адрес'] = $ADPEC;
$OTBET['Строка_ПОСТ'] = $_POST;
$OTBET['Строка'] = $CTPOKA0;


MACCuB_B_FAiL($OTBET,'Файл2.txt');


function object2file($value, $filename)
{
    $str_value = serialize($value);
    
    $f = fopen($filename, 'w');
    fwrite($f, $str_value);
    fclose($f);
}
function MACCuB_B_FAiL($value, $filename)
{
	$results = print_r($value, true);
	file_put_contents($filename, $results);
}

function ZAnPOC( $url, $CTPOKA )
{
    $options = array(
        CURLOPT_RETURNTRANSFER => true,     // return web page
        CURLOPT_HEADER         => false,    // don't return headers
        CURLOPT_FOLLOWLOCATION => true,     // follow redirects
        CURLOPT_ENCODING       => "",       // handle all encodings
        CURLOPT_USERAGENT      => "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/38.0.2125.111 Safari/537.36 OPR/25.0.1614.68", // Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3
        CURLOPT_AUTOREFERER    => true,     // set referer on redirect
        CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
        CURLOPT_TIMEOUT        => 120,      // timeout on response
        CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
        CURLOPT_SSL_VERIFYPEER => false,     // Disabled SSL Cert checks
        CURLOPT_SSL_VERIFYHOST => false,     // Disabled SSL Cert checks
		
		CURLOPT_HTTPHEADER => array('Expect:'),
		CURLOPT_POST => true,
		CURLOPT_POSTFIELDS => $CTPOKA,
		CURLOPT_REFERER => 'https://avtoperevozki.incom-cargo.com/po_rossii/',
		CURLOPT_COOKIEJAR => 'KyKu'
    );
 
    $ch      = curl_init( $url );
    curl_setopt_array( $ch, $options );
    $content = curl_exec( $ch );
    $err     = curl_errno( $ch );
    $errmsg  = curl_error( $ch );
    $header  = curl_getinfo( $ch );
    curl_close( $ch );
 
    $header['Ошибка_Номер']   = $err;
    $header['Ошибка_Сообщение']  = $errmsg;
    $header['Содержимое'] = $content;
    return $header;
}


В результате: "$OTBET['Содержимое']" - пустое, а код-ответ 200. Какбы ошибки нет и нету "результата нажатия на кнопку". Что не так?
23 авг 17, 12:17    [20743622]     Ответить | Цитировать Сообщить модератору
 Re: [PHP] Налаживание калькулятора  [new]
vkle
Member

Откуда: Самара
Сообщений: 13474
Нууу... причин вероятных может быть тьма.
Ошибка может быть в параметрах запроса, которые сервер не понял и ответил столь странным образом. Или на сервере какая-то защита от слишком частых запросов. Или от роботов, вроде Ваш8его. Это как примеры, может быть ещё куча вариантов.
В общем случае сервер не обязан выставлять какой-то определенный код при ошибке или при отказе выдать ответ, и, наоборот, вполне корректный ответ можно сопроводить кодом 404. Если курл возвращает именно пустую строку (не false), то технически код 200 вполне приемлем.
23 авг 17, 15:16    [20744441]     Ответить | Цитировать Сообщить модератору
 Re: [PHP] Налаживание калькулятора  [new]
47911
Member

Откуда: Там чудеса, там леший бродит.
Сообщений: 43
vkle
Нууу... причин вероятных может быть тьма.
Ошибка может быть в параметрах запроса, которые сервер не понял и ответил столь странным образом. Или на сервере какая-то защита от слишком частых запросов. Или от роботов, вроде Ваш8его. Это как примеры, может быть ещё куча вариантов.
В общем случае сервер не обязан выставлять какой-то определенный код при ошибке или при отказе выдать ответ, и, наоборот, вполне корректный ответ можно сопроводить кодом 404. Если курл возвращает именно пустую строку (не false), то технически код 200 вполне приемлем.

Я рассуждал так: ведь скрипт-приемник(мой) посылая запрос на скрипт-донор(на другом сайте) не будет чем-то отличатся от "человека с браузером". Или я что-то упустил из виду? Там посылается ПОСТ запрос 2 вещей. Город-Отправка и ГородПреемник. Что ещё сервер может "Смотреть"?
23 авг 17, 16:45    [20744755]     Ответить | Цитировать Сообщить модератору
 Re: [PHP] Налаживание калькулятора  [new]
47911
Member

Откуда: Там чудеса, там леший бродит.
Сообщений: 43
Причём заголовки оно отдаёт. . .
+

HTTP/1.1 200 OK Server: nginx/1.10.2 Date: Wed, 23 Aug 2017 08:26:28 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 0 Connection: keep-alive X-Powered-By: PHP/5.6.30 P3P: policyref="/bitrix/p3p.xml", CP="NON DSP COR CUR ADM DEV PSA PSD OUR UNR BUS UNI COM NAV INT DEM STA" X-Powered-CMS: Bitrix Site Manager (55e674d563744bb9efc873612440f6ac) Set-Cookie: PHPSESSID=ustrreqsrm7nci399s51uaoo81; path=/; domain=.incom-cargo.com; HttpOnly 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 X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN
23 авг 17, 16:47    [20744762]     Ответить | Цитировать Сообщить модератору
 Re: [PHP] Налаживание калькулятора  [new]
vkle
Member

Откуда: Самара
Сообщений: 13474
47911
не будет чем-то отличатся от "человека с браузером"
Сейчас то отличается. И, довольно сильно отличается.


47911
Что ещё сервер может "Смотреть"?
Куки, заголовки, порядок обращений клиента к серверу... А лучше, спросите у владельцев сайта - они дадут гораздо более компетентный ответ.
23 авг 17, 16:58    [20744797]     Ответить | Цитировать Сообщить модератору
 Re: [PHP] Налаживание калькулятора  [new]
47911
Member

Откуда: Там чудеса, там леший бродит.
Сообщений: 43
vkle
47911
не будет чем-то отличатся от "человека с браузером"
Сейчас то отличается. И, довольно сильно отличается.


47911
Что ещё сервер может "Смотреть"?
Куки, заголовки, порядок обращений клиента к серверу... А лучше, спросите у владельцев сайта - они дадут гораздо более компетентный ответ.


Само место обращения со стороны человека в серверу:
      if (strParams != '') {
          jQuery.ajax({
              type: "POST",
              url: '/111/ajaxcall.php',
              data: request,// Строка вида "Город1=Цифра1". 
              success: function (html){
                  jQuery('.interactive .table-block table').remove();
                  jQuery('.interactive .table-block').html(html);

                  if (typeof(smartUpdateTables) === 'function') {
                      smartUpdateTables();
                  }
              }
          });
      }

Их скрипт может прочитать заголовки(https://avtoperevozki.incom-cargo.com/include/ajaxcall.php)?(Ну, кроме: браузера, ip, куков)
24 авг 17, 19:12    [20747806]     Ответить | Цитировать Сообщить модератору
 Re: [PHP] Налаживание калькулятора  [new]
vkle
Member

Откуда: Самара
Сообщений: 13474
Их скрипт может прочитать ровно то, что прислал браузер.
И, ещё может посчитать, например, паузу между запросом странички с формой (или запросом какой-нибудь картинки на странице с формой) и сабмитом формы и принять решение человек/робот. И ещё много чего можно проанализировать.
Не хочу обидеть, просто интересуюсь... Вы думаете, что Вы первый, кто хочет воспользоваться плодами их труда нахаляву? Мне вот почему-то думается, что уже не один десяток таких охотников тактично отшили программисты подобных сервисов.
24 авг 17, 20:42    [20747912]     Ответить | Цитировать Сообщить модератору
Все форумы / PHP, Perl, Python Ответить