Jump to content

Допоможіть. Передача строки http-серверу


Recommended Posts

Намагаюсь стикувати свою білінгову систему з платіжними терміналами :lol: І стикнувся з проблемою. Весь білінг веб-орієнтований (самописний). Мені потрібно отримати строку в чистому виді, проаналізувати її, і відправити відповідь. Буду працювати з системою УкрНет. Може хтось вже робив аналогічне.

Тобто, коли клієнт вводить свій ІД в терміналі, він шле мені запит 01;ІДклієнта;

Отримати цю строку через $_SERVER['QUERY_STRING'] не можу, так як для цього потрібно передвати заголовки ґет хттп/1.1 і т.д. Мені потрібно земулювати тупе сокетне з'єднання, через запит якого передається тільки одна строка, і отримується одна у відповідь. Але з допомогою веб :D

Link to post
Share on other sites

ну так нехай шле запит у вигляді http://bla-bla-bla.c...id.php?id=15512 і вже в самому скрипті буде отойво айді. Чи я шось недозрозумів ?

 

Не зовсім так. Як би було так просто... )) з їхнього сервера відкривається звичайне сокетне з'єднання на певний порт. запит у втгляді http://....?id=... формує інтернет-оглядач, відкриваючи з'єднання з сервером і формуючи всі хттп -заголовки запиту. На рівні візуальному це так, а на рівні обміну даними між клієнтом і сервером виглядає трохи кучерявіше. Просто для того, щоби сервак захавав такий запит, йому треба передати хост, тип запиту, адресу скрипта, протокол і його вервсю.... без того він запит не опрацьовує. А потрібно якось зробити так, щоби він міг отримувати одну строку запиту без купи заголовків. Але здається мені, сам протокол не позволяє... Потрібно якийсь костиль...

Link to post
Share on other sites

тоді тре "костиль", який виконає таких запит через php_cli, або має бути якийсь сервіс, який виконує дану операцію.

 

або "копати" в сторону fsockopen

Edited by emon
Link to post
Share on other sites

Намагаюсь стикувати свою білінгову систему з платіжними терміналами :lol: І стикнувся з проблемою. Весь білінг веб-орієнтований (самописний). Мені потрібно отримати строку в чистому виді, проаналізувати її, і відправити відповідь. Буду працювати з системою УкрНет. Може хтось вже робив аналогічне.

Тобто, коли клієнт вводить свій ІД в терміналі, він шле мені запит 01;ІДклієнта;

Отримати цю строку через $_SERVER['QUERY_STRING'] не можу, так як для цього потрібно передвати заголовки ґет хттп/1.1 і т.д. Мені потрібно земулювати тупе сокетне з'єднання, через запит якого передається тільки одна строка, і отримується одна у відповідь. Але з допомогою веб :D

 

 

Робив саме для укрнета через сокети, тупо повісив демона, він собі крутиться і приймає запити :huh:

Link to post
Share on other sites

На, я не жадний :huh:

 

<?php
error_reporting(E_ALL);
//error_reporting(E_ALL ^ ~E_NOTICE);
header('Content-Type: text/plain;');
set_time_limit(0);
ob_implicit_flush();
$port = 9000;
$address = "xxx.xxx.xxx.xxx";
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, $address, $port);
socket_set_option($sock, SOL_SOCKET, SO_KEEPALIVE, 1);
socket_set_nonblock($sock);
socket_listen($sock, 1000);
$clients = array($sock);
$tarr = array();
while (true) {
   $read = $clients;
   if (count($tarr) > 0)
       foreach ($tarr as $ind => $tim) {
           if ((time() - $tim) > 60) {
               socket_close($read[$ind + 1]);
               $key = array_search($read[$ind + 1], $clients);
               unset($clients[$key]);
               unset($iparr[$key - 1]);
               unset($tarr[$ind]);
               continue;
           }
       }

   if (socket_select($read, $write, $except, 1) < 1)
       continue;
   if (in_array($sock, $read)) {
       $clients[] = $newsock = socket_accept($sock);
       socket_getpeername($newsock, $ip);
       $key = array_search($sock, $read);
       $iparr[] = $ip;
       $tarr[] = time();
       unset($read[$key]);
       $read[] = $newsock;
       continue;
   }
   foreach ($read as $index => $read_sock) {
       $data = socket_read($read_sock, 1024);
       if ($data === false) {
           $key = array_search($read_sock, $clients);
           unset($clients[$key]);
           unset($iparr[$key - 1]);
           unset($tarr[$key - 1]);
           continue;
       }
       $data = trim($data);
       if (!empty($data)) {

         // тут обробка запиту!!!


           $tarr[$index - 1] = time();
           switch ($data) {
               case "<KILLMY>":
                   socket_close($read_sock);
                   $key = array_search($read_sock, $clients);
                   unset($clients[$key]);
                   unset($iparr[$key - 1]);
                   unset($tarr[$key - 1]);
                   break;
               case "<PING>":
                   socket_write($read_sock, "<PONG>");
                   break;
           }
           if ($data === "<KILL>") {
               socket_close($sock);
               break(2);
           }
       }
   }
}
socket_close($sock);
?>

 

Запускаєш, та й хай собі висить

/usr/bin/nohup /usr/local/bin/php -f /patch/to/ukrnet/socket.php >> /var/log/ukrnet.log &

 

До речі. Ми чекаємо більше ніж пів року, а нас годують "завтраками" :lol: Так що можете не поспішати

 

З.І. З допомогою веб не вийде. Вони по впн на кастомний порт будуть конектиться до твого серверу

Edited by hsasha
Link to post
Share on other sites

Блін)) тепер я поняв, що багато чого не знаю :lol:))) А так все ніби просто.

А над самим демоном не потрібно наглядача, щоби часом сокет не закрився? :D

 

 

До речі. Ми чекаємо більше ніж пів року, а нас годують "завтраками" :huh: Так що можете не поспішати

 

А що не так, якщо не секрет?

Link to post
Share on other sites

Якщо помилок не буде, то не закриється, вони проведуть тести. Але можна написати, щоб запустив в разі чого.

 

А що не так, якщо не секрет?

Аби ж я знав. То одне то інше.

Аськи немає, переписка тільки через мило... Кака вобщим, але надії не втрачаємо , ждемо)) Казали в кінці березня, але так кожен місяць

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...