Перейти до

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


Рекомендованные сообщения

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

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

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

Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах

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

 

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

Ссылка на сообщение
Поделиться на других сайтах

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

 

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

Відредаговано emon
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

 

 

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

Ссылка на сообщение
Поделиться на других сайтах

На, я не жадний :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: Так що можете не поспішати

 

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

Відредаговано hsasha
Ссылка на сообщение
Поделиться на других сайтах

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

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

 

 

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

 

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

Ссылка на сообщение
Поделиться на других сайтах

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

 

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

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

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

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...