<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Обмен данными между скриптами с помощью сервера XAMPP]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=18174</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=18174&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Обмен данными между скриптами с помощью сервера XAMPP».]]></description>
		<lastBuildDate>Thu, 25 Apr 2024 02:00:55 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[AHK: Обмен данными между скриптами с помощью сервера XAMPP]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=160829#p160829</link>
			<description><![CDATA[<p>Понадобилось для одного проекта решить вопрос с обменом данными между 10 компьютерами глобальной сети.<br />Через соккеты сервер-&gt;клиент делать это было заморочно, так как каждый компьютер должен был являться как сервером, так и клиентом, к тому же айпи у них время от времени менются.<br />Поэтому решил установить на винду веб-сервер - XAMPP.<br /><a href="https://www.apachefriends.org/index.html">https://www.apachefriends.org/index.html</a><br />При установке можно убрать все галочки - достаточно Apache и PHP.<br />Изначально он устанавливается без доступа с глобальной сети.<br />Для разрешения подключения к нему с интернета, нужно заменить в файле httpd-xampp.conf в блоке Alias /phpmyadmin<br /></p><div class="codebox"><pre><code>Require local</code></pre></div><p>на<br /></p><div class="codebox"><pre><code>Require all granted</code></pre></div><p>После чего подсоединяться к нему через своё айпи (возможно понадобится перенаправить порты).<br />Если же айпи меняется, то можно использовать какой-нибудь динамический DNS сервис, например:<br /><a href="https://www.dynu.com/DynamicDNS/IPUpdateClient/WindowsClient">https://www.dynu.com/DynamicDNS/IPUpdat … dowsClient</a><br />После установки клиента, он будет следить за всеми изменениями через заданный промежуток времени.<br />В директории xampp\htdocs создаем новую папку, например, test.<br />И туда пишем простейшую серверную часть index.php, типа:<br /></p><div class="codebox"><pre><code>&lt;?php
$databaseFile = &#039;database.txt&#039;;
$data = file_get_contents($databaseFile);
$method = $_SERVER[&#039;REQUEST_METHOD&#039;];

switch ($method) {
    case ($method == &#039;GET&#039;):
        header(&#039;Content-Type: text/html; charset=utf-8&#039;);
        echo $data;
        break;
    case ($method == &#039;POST&#039;):
        header(&#039;Content-Type: text/html; charset=utf-8&#039;);
        $requestBody = file_get_contents(&#039;php://input&#039;);
		$data .= $requestBody;
        file_put_contents($databaseFile, $data);
        echo &quot;post&quot;;
        break;
    default:
        http_response_code(404);
        echo &quot;404 error&quot;;
        break;
}</code></pre></div><p>Создаем там же файл database.txt.<br />При методе GET сервер возвращает текст из database.txt.<br />При методе POST сервер добавляет данные из запроса в database.txt.<br />При необходимости можно использовать json - в php с этим без проблем.<br />Интересный момент, что при посылании POST запроса на сервер с ссылкой типа: &quot;htpp://123.45.67.89:8081/test&quot;,&nbsp; где 8081 - это порт, который я перенаправил в роутере, то сервер получает не POST, а GET.<br />Проблема решается добавлением слеша в конец ссылки: &quot;htpp://123.45.67.89:8081/test/&quot;.<br />Меня устраивало получение данных от сервера через polling, но при необходимости можно прикрутить и websockets api.<br />Пример GET запроса:<br /></p><div class="codebox"><pre><code>HTTP := ComObjCreate(&quot;WinHTTP.WinHTTPRequest.5.1&quot;)
HTTP.Open(&quot;GET&quot;, &quot;htpp://123.45.67.89:8081/test/&quot;, true)
HTTP.SetRequestHeader(&quot;User-Agent&quot;, &quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36&quot;)
HTTP.SetRequestHeader(&quot;Pragma&quot;, &quot;no-cache&quot;)
HTTP.SetRequestHeader(&quot;Cache-Control&quot;, &quot;no-cache, no-store&quot;)
HTTP.SetRequestHeader(&quot;If-Modified-Since&quot;, &quot;Sat, 1 Jan 2000 00:00:00 GMT&quot;)
HTTP.Send()
HTTP.WaitForResponse()
msgbox % HTTP.ResponseText</code></pre></div><p>Пример POST запроса:<br /></p><div class="codebox"><pre><code>HTTP := ComObjCreate(&quot;WinHTTP.WinHTTPRequest.5.1&quot;)
HTTP.Open(&quot;POST&quot;, &quot;htpp://123.45.67.89:8081/test/&quot;, true)
HTTP.SetRequestHeader(&quot;User-Agent&quot;, &quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36&quot;)
HTTP.SetRequestHeader(&quot;Pragma&quot;, &quot;no-cache&quot;)
HTTP.SetRequestHeader(&quot;Cache-Control&quot;, &quot;no-cache, no-store&quot;)
HTTP.SetRequestHeader(&quot;If-Modified-Since&quot;, &quot;Sat, 1 Jan 2000 00:00:00 GMT&quot;)
HTTP..SetRequestHeader(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;)
HTTP.Send(&quot;some data&quot;)
HTTP.WaitForResponse()
msgbox % HTTP.ResponseText</code></pre></div><p><a href="http://forum.script-coding.com/viewtopic.php?id=18175">Тема для обсуждения</a></p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 25 Apr 2024 02:00:55 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=160829#p160829</guid>
		</item>
	</channel>
</rss>
