Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с сокетами, не принимаются данные по сокету 
:(
    Опции темы
nepekyp
Дата 6.9.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 13.3.2005

Репутация: нет
Всего: нет



Имеетя рабочий скрипт (по крайней мере при установке Apache и PHP под WIN)
а вот под Linux выдает ошибку "error f1"

помогите разобраться, настройки мож не такие? вроде все посмотрел

КОД:

Код

<?

  require($HTTP_SERVER_VARS['DOCUMENT_ROOT']."/include/header.inc");

  $user=$HTTP_POST_VARS['user'];
  $pass=$HTTP_POST_VARS['pass'];
  $send=$HTTP_POST_VARS['Send'];

  $iduser=$HTTP_POST_VARS['iduser'];
  $username=$HTTP_POST_VARS['username'];
  $exchange=$HTTP_POST_VARS['exchange'];
  $rowid=$HTTP_POST_VARS['rowid'];  
  $exchange=$HTTP_POST_VARS['exchange'];
  $mstart=$HTTP_POST_VARS['mstart'];
  $year=$HTTP_POST_VARS['year'];  
  $start=$HTTP_POST_VARS['start'];
  $finish=$HTTP_POST_VARS['finish'];    
  $range=$HTTP_POST_VARS['range'];
  $month=$HTTP_POST_VARS['month'];
  $full=$HTTP_POST_VARS['full'];      
  
echo "<br><br>"; 
$socket=null;
function doconnect()
{
global $socket;
  $service_port = "80";
  $address = "stat.tario.ru";

  $socket = socket_create (AF_INET, SOCK_STREAM, 6);
  if ($socket < 0) 
  {
    echo "socket() failed: reason: " . socket_strerror(socket_last_error()) . "<br>\n";
    return -1;
  }

  $result = socket_connect ($socket, $address, $service_port);
  if ($result < 0) 
  {
    echo "connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error()) . "<br>\n";
    return -1;
  }

}

function doit($postcontent)
{  
  global $socket;
  doconnect();

  $in = "POST http://stat.tario.ru/cgi-bin/login HTTP/1.1\r\n"
     ."Host: stat.tario.ru\r\n"
     ."Referer: http://stat.tario.ru/cgi-bin/login\r\n"
     ."User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.5) Gecko/20041108 Firefox/1.0\r\n"
     ."Content-Type: application/x-www-form-urlencoded\r\n"
     ."Content-Length: ".strlen($postcontent)
     ."\r\n\r\n"
     .$postcontent;     
  $out = '';
  
  socket_write ($socket, $in, strlen ($in));

  $totalout="";
/*  while ($out=socket_read($socket, 20480)) 
  {
    $totalout.=$out;
  }
*/
  
  $totalout=socket_read($socket, 20480);
  
  socket_close ($socket);
  return $totalout;
}
  
//-------------------------------------------------------------------------------------------------------------------
  if (isset($send))
  { 
    $content="user=".urlencode($user)
            ."&pass=".urlencode($pass)
            ."&Send=Send";
            
    $totalout=doit($content);

    if (strpos($totalout, "name=\"Send\"")>0)
    {
?>
<form method="post" action="checkaccount.php" enctype="application/x-www-form-urlencoded">
<p> Если вы являетесь нашим абонентом вам достаточно ввести
 свой лицевой счет и пин код и получить информацию об
 использовании уcлуги предоставляемой нашей компанией.</p>
  <table border="0" cellspacing="2" cellpadding="2" align="center">
    <tr>
      <td><p>Введите лицевой счет:</p></td>
      <td>
        <input type="text" name="user"  maxlength="40">
      </td>
    </tr>
    <tr>
      <td><p>Введите код персонального доступа:</p></td>
      <td>
        <input type="password" name="pass"  maxlength="16">
      </td>
    </tr>
    <tr>
      <td align="center" colspan="2">
        <input type="submit" name="Send" value="ок">
      </td>
    </tr>
  </table>
</form>
<?
    }
    else if(strpos($totalout, "name=\"range\"")>0)
    {
      $find1='<form method="post" action="http://stat.tario.ru/cgi-bin/login" enctype="application/x-www-form-urlencoded">';
      echo "<br>";

      $pos1 = strpos($totalout, $find1)+strlen($find1);
      $pos2 = strpos($totalout, "</form>");

      if (($pos1===false)||($pos2===false)||($pos1>$pos2))
      {
        echo "error1";
      }
      else
      {
        echo "<form method=\"post\" action=\"checkaccount.php\" enctype=\"application/x-www-form-urlencoded\">";
        echo "<table bgcolor=\"#ffffff\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\">";
        echo substr($totalout, $pos1, $pos2-$pos1);
        echo "</table>";
        echo "</form>";
      }
      
    }
    else
    {
      echo "error f1";
    }
      
  }
//-------------------------------------------------------------------------------------------------------------------  
  elseif (isset($iduser))
  {
    $postcontent="iduser=".urlencode($iduser)
            ."&username=".urlencode($username)
            ."&exchange=".urlencode($exchange)
            ."&rowid=".urlencode($rowid)
            ."&mstart=".urlencode($mstart)
            ."&year=".urlencode($year)
            ."&start=".urlencode($start)
            ."&finish=".urlencode($finish);
if (isset($range))$postcontent.="&range=".urlencode($range);
if (isset($month))$postcontent.="&month=".urlencode($month);
if (isset($full)) $postcontent.="&full=".urlencode($full);

//    $totalout=doit($content);
  
    doconnect();

    $in = "POST http://stat.tario.ru/cgi-bin/login HTTP/1.1\r\n"
     ."Host: stat.tario.ru\r\n"
     ."Referer: http://stat.tario.ru/cgi-bin/login\r\n"
     ."User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.5) Gecko/20041108 Firefox/1.0\r\n"
     ."Content-Type: application/x-www-form-urlencoded\r\n"
     ."Content-Length: ".strlen($postcontent)
     ."\r\n\r\n"
     .$postcontent;     
    $out = '';
  
    socket_write ($socket, $in, strlen ($in));

    
    echo "<font color=\"#FF0000\" size=\"-4\">";  
    
    $fl1=false;
    $fl2=false;
    $fl3=false;
    $fl4=false;    
//    $fl5=false;
    $i=1;  

    while ($out=socket_read($socket, 2048)) 
    {
      
      if (!$fl1)
      {
        $pos1 = strpos($out, "<tab");
      
        if ($pos1!==false)
        {
          $fl1=true;
          $out=substr($out,$pos1);
//          $out= strtr($out, "table", "table border=\"1\"");          
//          $out= str_replace("table", "table border=\"1\"", $out);          
        }
        
      }  
      

      if (($fl1)&&(!$fl3))
      {
        $find="cellpadding=\"0\"";
        $rep="cellpadding=\"2\"";
        $pos3=strpos($out, $find);
        if ($pos3!==false)
        {
          $fl3=true;
          $out= str_replace($find, $rep, $out);
//          $out= strtr($out, $find, $rep);
        }
      }
      
      if (($fl1)&&(!$fl4))
      {
        $find="cellspacing=\"0\"";
        $rep="cellspacing=\"4\"";
        $pos4=strpos($out, $find);
        if ($pos4!==false)
        {
          $fl4=true;
          $out= str_replace($find, $rep, $out);          
//          $out= strtr($out, $find, $rep);
        }
      }
      
      if ($fl1)
      {
        $pos2 = strpos($out, "</tab");
         
        if ($pos2!==false)
        {
          $fl2=true;
          $out=substr($out,0,$pos2+8);     
        }
 
        echo $out;
      }
      
      if ($fl2)
      {
        break;
      }
      
      $i++;
    }

    echo "</font>";      
    socket_close ($socket);

   
  
  
  }
//-------------------------------------------------------------------------------------------------------------------    
  else
  {
?>
<form method="post" action="checkaccount.php" enctype="application/x-www-form-urlencoded">
<p> Если вы являетесь нашим абонентом вам достаточно ввести
 свой лицевой счет и пин код и получить информацию об
 использовании уcлуги предоставляемой нашей компанией.</p>

  <table border="0" cellspacing="2" cellpadding="2" align="center">
    <tr>
      <td><p>Введите лицевой счет:</p></td>
      <td>
        <input type="text" name="user"  maxlength="40">
      </td>
    </tr>
    <tr>
      <td><p>Введите код персонального доступа:</p></td>
      <td>
        <input type="password" name="pass"  maxlength="16">
      </td>
    </tr>
    <tr>
      <td align="center" colspan="2">
        <input type="submit" name="Send" value="ок">
      </td>
    </tr>
  </table>
</form>
<?
  }

require($HTTP_SERVER_VARS['DOCUMENT_ROOT']."/include/footer.inc");?>


PM MAIL   Вверх
ZlojEzh
Дата 6.9.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

Репутация: нет
Всего: 15



после строки 83 ( $totalout=doit($content); )
пишем:
Код

print $totalout;
die();

смотрим, что вывело
есть там строки name="range" или name="Send"?

там уже решай в чем проблема: то ли post-запрос неправильно работает, то ли ограничение в 20кб обрезает нужный кусок страницы
если дело в 20-ти килобайтах - удаляем строчку 70 и снимаем коммент со строк 66-68
PM MAIL ICQ   Вверх
nepekyp
Дата 12.9.2006, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 13.3.2005

Репутация: нет
Всего: нет



Спасибо за помощь!
Проблема было действительно в 20кб =)

Вопрос такой почему не передаются ковычки "
хотя может и передаются но сервак не воспринимает
на мой взгяд проблема в строке 79 из-за использования функции urlencode

как можно безболезненно передать кавычки? например имя пользователя ООО "Автоваз"
PM MAIL   Вверх
UhaMurad
Дата 23.9.2007, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 22.9.2004
Где: Махачкала

Репутация: нет
Всего: нет



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

У меня та же проблема: и кавычки и '\' приходят на сервер в виде \" и \\ 

...

посылаешь <news_of_category category="1"> а в $_REQUEST сидит <news_of_category category=\"1\">

...

может быть необходимо использовать какую-то функцию, чтоб убрать эти слешики... хотя нигде в мануалах я такого не читал  smile 
PM MAIL WWW   Вверх
CyClon
Дата 10.10.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



magic_quotes отруби или обратно весь $_REQUEST через stripslashes пропускай.


--------------------
user posted image
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0806 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.