<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Обмен данными между скриптами с помощью сервера XAMPP]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=18174&amp;type=atom" />
	<updated>2024-04-25T02:00:55Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=18174</id>
		<entry>
			<title type="html"><![CDATA[AHK: Обмен данными между скриптами с помощью сервера XAMPP]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=160829#p160829" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2024-04-25T02:00:55Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=160829#p160829</id>
		</entry>
</feed>
