Szerző Téma: Régió II  (Megtekintve 7007 alkalommal)

Nem elérhető krisk

  • 2380
    • Profil megtekintése
Régió II
« Válasz #15 Dátum: 2016. október 13. - 17:30:08 »
+4 Show voters
Idézetet írta: Kyosuke_Hiroshi date=1476340824\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63324\" data-ipsquote-contentclass=\"forums_Topic

A statikus HTML oldalt a szerver a /scriptfiles mappából olvassa ki, 

 <- Ezt pontosan hogy érted?
a többi tiszta, socket pluginnal webadmin kb easy win, de őőőő ez a rész mit jelente?
 
Egy egyszerű HTML weboldal néhány űrlappal, amik többsége gyakorlatilag egy gombból áll, gyakorlatilag a feladatod az, hogyha érkezik egy akármilyen HTTP GET kérés, akkor PAWN-ban megnyitsz egy fájlt a scriptfiles mappából majd a HTTP szervered visszadobja ezt válaszként. Egy egyszerű példaképp:
 

<html>
<body>
<h1>Szerver leállítása</h1>
<form action=\"szerver_leallitas\" method=\"post\">
<input type=\"submit\" value=\"Leállítás\">
</form>
</body>
</html>
 
[/quote]
A HTML oldal designje nem fontos, az nem lesz értékelve, a lényeg maga a szerver.
A webszervereden tudod ellenőrízni, hogy milyen HTTP kérések jönnek be, ha bejön egy POST kérés a szerver_leallitas URL-re, akkor egyszerűen a scripten belülről küldesz egy RCON exit parancsot.
Az hülyeség, hogy angol dokumentációt kell olvasni, csak az eredeti RFC-t adtam ki, de ha rákeresel az interneten, hogy a HTTP protokol hogy működik, igazából nagyon egyszerű. Ha van PuTTY-d, akkor egyszerűen felcsatlakozol pl. a httpbin.org-ra a 80-as porton, és elkezdesz tesztelgetni, kiírja az összes HTTP fejlécet, amit a kliensed elküld (ha megnyitod pl. a https://httpbin.org/get oldalt).
De segítségképp itt van egy példa kérés-válasz:
 

GET / HTTP/1.1
Host: teszthoszt.hu
Accept: text/html
User-Agent: pelda HTTP kliens

 


HTTP/1.1 200 OK
Server: pelda http szerver
Date: Thu, 13 Oct 2016 15:22:21 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 46
<html><body><h1>hello vilag</h1></body></html>

Régió II
« Válasz #16 Dátum: 2016. október 13. - 23:17:38 »
0 Show voters
és akkor ez böngészőn keresztül kéne meghívni vagy SAMP-ban IG? [a verseny vége után mert most úgyis kifogok esni elküldöm hogy mit kezdtem el csinálni amire 1. én gondoltam :D már csak azért is ]
Kezdem kapisgálni a témát.


Ha véletlenül találkoznánk szólj hogy ígértem hogy leborulok eléd és kezet csókolok
« Utoljára szerkesztve: 2016. október 13. - 23:43:25 írta Kyosuke_Hiroshi »

Nem elérhető krisk

  • 2380
    • Profil megtekintése
Régió II
« Válasz #17 Dátum: 2016. október 14. - 17:49:44 »
0 Show voters
Az elinduláshoz itt egy példa HTTP szerver, ami egy statikus oldalt szolgál ki, ha bármilyen GET lekérést kap a böngészőtől:
 

#include <a_samp>
#include <socket>
#include <sscanf2>
new Socket:sock;
main()
{
print(\"\\n----------------------------------\");
print(\"  Pelda HTTP szerver\\n\");
print(\"----------------------------------\\n\");
sock = socket_create(TCP);
socket_set_max_connections(sock, 5000);
socket_bind(sock, \"127.0.0.1\");
socket_listen(sock, 80);
}
public onSocketReceiveData(Socket:id, remote_clientid, data[], data_len)
{
print(data);
new method[10];
if(sscanf(data, \"s[10]{s}\", method))
return printf(\"invalid request, might want to send something back\");
if(!strcmp(method, \"GET\")) {
printf(\"got a GET request, let\'s send back a stock response\");
ServeHTTP(id, remote_clientid);
return 1;
}
if(!strcmp(method, \"POST\")) {
printf(\"got a POST request\");
return 1;
}
return 1;
}
stock ServeHTTP(Socket:id, remote_clientid)
{
new File:handle = fopen(\"response\", io_read);
new buf[128];
if(!handle)
return printf(\"there\'s been an error opening the response file\");
while(fread(handle, buf))
socket_sendto_remote_client(id, remote_clientid, buf);
fclose(handle);
return 1;
}

 
A response file tartalma pedig:
 

HTTP/1.1 200 OK
Server: sample http server
Content-Type: text/html; charset=utf-8
Content-Length: 46
<html><body><h1>hello vilag</h1></body></html>

 
Nyilván ez nem produkciókész kód, pl. a HTTP fejlécet nem fájlból kéne kiolvasnia, hiszen pl. a tartalom hossza függ a fájl hosszától, illetve dátumot is kéne küldeni a szervernek.
Ezen kívül, ha csak nem akarod, hogy a böngészőtől rengeteg GET kérést kapj képekre és egyéb adatokra, akkor erősen ajánlom, hogy a szerver azonnal bontsa a kapcsolatot, amint a HTML oldalt kiküldte, és lehetőleg csak egy HTML oldalt szolgáljon ki a szerver (egyébként kell egy statikus tartalom-kiszolgáló szervert írnod, mint pl. az apache public_html cucca).
« Utoljára szerkesztve: 2016. október 14. - 17:58:34 írta Reynolds »

Régió II
« Válasz #18 Dátum: 2016. október 14. - 18:18:55 »
0 Show voters
Idézetet írta: Reynolds date=1476460184\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63324\" data-ipsquote-contentclass=\"forums_Topic
Nyilván ez nem produkciókész kód, pl. a HTTP fejlécet nem fájlból kéne kiolvasnia, hiszen pl. a tartalom hossza függ a fájl hosszától, illetve dátumot is kéne küldeni a szervernek.
 
Nem kötelező elküldeni ezeket, max kép fájloknál.
Nekem ennyivel működik:
 

HTTP/1.1 200 OK
Content-type: text/html; charset=iso-8859-2

 
A kérdésem az lenne, hogy képes-e elküldeni a socket plugin egy szimpla ASCII 0 karaktert? Mert bárhogy próbálkozok vele a webszerver nem kapja meg.
 

Char Dec Col/Row Oct Hex  Name and Description
       0  00/00   00  00  NUL  (Ctrl-@)  NULL

 
Egy láthatatlan karakter, de a fájlban mégis benne van. A pawn felismeri, csak továbbítani nem tudom a böngésző felé, míg a többi karaktert igen.
« Utoljára szerkesztve: 2016. október 14. - 18:26:42 írta 1ST_Chr »

Régió II
« Válasz #19 Dátum: 2016. október 14. - 19:35:36 »
0 Show voters
én addig jutottam hogy megnyitok egy statikus HTML fájl-t rá nyomok a gombra a samp ki írja a szerver konzolba a HTTP dolgokat és GET alapján ha olyan leállítja a szervert

Régió II
« Válasz #20 Dátum: 2016. október 15. - 09:12:49 »
0 Show voters
Idézetet írta: Reynolds date=1476460184\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63324\" data-ipsquote-contentclass=\"forums_Topic
Ezen kívül, ha csak nem akarod, hogy a böngészőtől rengeteg GET kérést kapj képekre és egyéb adatokra, akkor erősen ajánlom, hogy a szerver azonnal bontsa a kapcsolatot, amint a HTML oldalt kiküldte, és lehetőleg csak egy HTML oldalt szolgáljon ki a szerver (egyébként kell egy statikus tartalom-kiszolgáló szervert írnod, mint pl. az apache public_html cucca).
 
Ez a socket plugin nem alkalmas képek továbbítására, így már nem az én felelősségem egy nem megfelelően felépített html oldal után takarítani. Ha így kellene megoldani akkor egy csomó előnyt veszítek.
 
statikus tartalom-kiszolgáló szervert írnod, mint pl. az apache public_html cucca

 
Fogalmam sincs ez mit jelent.

Régió II
« Válasz #21 Dátum: 2016. október 15. - 12:40:17 »
0 Show voters
Nem feltétlen így értette valamennyire én már jöttem a dolgokra most csak idő kell, az API-m alapja kész van szóval.
Bár már 2. ra esek neki a dolgoknak csak 1. közel sem ilyesmire gondoltam :D mt amit Reynolds le írt hogy mi kellene neki.

Régió II
« Válasz #22 Dátum: 2016. október 15. - 13:06:23 »
0 Show voters
Idézetet írta: Kyosuke_Hiroshi date=1476528017\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63324\" data-ipsquote-contentclass=\"forums_Topic
Nem feltétlen így értette valamennyire én már jöttem a dolgokra most csak idő kell, az API-m alapja kész van szóval.
Bár már 2. ra esek neki a dolgoknak csak 1. közel sem ilyesmire gondoltam :D mt amit Reynolds le írt hogy mi kellene neki.
 
Én már kész vagyok, de úgy látszik a samp nem alkalmas egy \'\\0\'-t tartalmazó string átküldésére. Pedig jó lett volna ezt a képes dolgot megoldani.

Nem elérhető krisk

  • 2380
    • Profil megtekintése
Régió II
« Válasz #23 Dátum: 2016. október 15. - 15:59:50 »
+1 Show voters
Idézetet írta: 1ST_Chr date=1476461935\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63324\" data-ipsquote-contentclass=\"forums_Topic


Nyilván ez nem produkciókész kód, pl. a HTTP fejlécet nem fájlból kéne kiolvasnia, hiszen pl. a tartalom hossza függ a fájl hosszától, illetve dátumot is kéne küldeni a szervernek.
 
Nem kötelező elküldeni ezeket, max kép fájloknál.
Nekem ennyivel működik:
 

HTTP/1.1 200 OK
Content-type: text/html; charset=iso-8859-2

 

[/quote]
Működni működik, csak a szabvány szerint kell dátum, ha a szerver tud küldeni olyat.
 

   Origin servers MUST include a Date header field in all responses,
   except in these cases:
      1. If the response status code is 100 (Continue) or 101 (Switching
         Protocols), the response MAY include a Date header field, at
         the server\'s option.
      2. If the response status code conveys a server error, e.g. 500
         (Internal Server Error) or 503 (Service Unavailable), and it is
         inconvenient or impossible to generate a valid Date.
      3. If the server does not have a clock that can provide a
         reasonable approximation of the current time, its responses
         MUST NOT include a Date header field. In this case, the rules
         in section 14.18.1 MUST be followed.

 
A tartalom hosszát nem kell elküldeni, de ha a szerver leáll valami ok miatt a küldés során akkor nem garantálható az adat integritása, szóval biztonsági okok miatt eléggé javasolt az elküldése. A szabvány ettől függően kéri, hogy hacsak nincs külön indok rá, legyen elküldve az üzenet hossza:
 

   Applications SHOULD use this field to indicate the transfer-length of
   the message-body, unless this is prohibited by the rules in section
   4.4.

 
Az alap socket_send függvény szöveget vár, nem tömböt, ami NULL-terminált. socket_send_array()-al elvileg lehet küldeni tetszőleges hosszúságú, tetszőleges tartalmú tömböt.
 

 
statikus tartalom-kiszolgáló szervert írnod, mint pl. az apache public_html cucca

 
Fogalmam sincs ez mit jelent.
 
[/quote]
Gyakorlatilag, hogy egy komplett webszervert kell írj, ami a weboldalra érkező GET kéréseket megfelelteti egy mappaszerkezetnek a webszervereden, például a scriptfiles/asd/fgh/j.png képet kiszolgálja a szerver, ha a http://localhost/asd/fgh/j.png képet lekéred a böngésződből. Ezt nem kötelező megcsinálni, csak mondtam, hogy a sok probléma miatt javasolt az, hogy csak egy szimpla HTML oldalt dobjon vissza a szerver minden kérésre.
« Utoljára szerkesztve: 2016. október 15. - 16:02:50 írta Reynolds »

Régió II
« Válasz #24 Dátum: 2016. október 15. - 16:57:33 »
0 Show voters
Az alap socket_send függvény szöveget vár, nem tömböt, ami NULL-terminált. socket_send_array()-al elvileg lehet küldeni tetszőleges hosszúságú, tetszőleges tartalmú tömböt.

 
Ha a socket_send, socket_send_array függvényeket használom, a böngésző nem kap meg semmilyen adatot. Csak a socket_sendto_remote_client-el működik.

Régió II
« Válasz #25 Dátum: 2016. október 17. - 11:51:07 »
0 Show voters
a statikus weboldalakra való tekintettel fel lehet töltelni ZIP fájlba mondjuk datara? 28 darab fájl van és egyessével felrakni pastebinre elég cukcsi lesz.
Ti kértetek statikus weboldalt. én a pawnoba is beletudtam volna építeni.

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Régió II
« Válasz #26 Dátum: 2016. október 17. - 13:05:48 »
+1 Show voters
Egyértelmű.. :D

Nem elérhető b1s

  • 2212
  • Faszidegbénulás
    • Profil megtekintése
Régió II
« Válasz #27 Dátum: 2016. október 17. - 16:52:22 »
+1 Show voters
Idézetet írta: 1ST_Chr date=1476543453\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63324\" data-ipsquote-contentclass=\"forums_Topic

Az alap socket_send függvény szöveget vár, nem tömböt, ami NULL-terminált. socket_send_array()-al elvileg lehet küldeni tetszőleges hosszúságú, tetszőleges tartalmú tömböt.

 
Ha a socket_send, socket_send_array függvényeket használom, a böngésző nem kap meg semmilyen adatot. Csak a socket_sendto_remote_client-el működik.
 
Ebben az esetben azt tanácsolom, használd a socket_sendto_remote_client függvényt! Köszönöm!

Nem elérhető Ben

  • 1754
  • Ben apó
    • Profil megtekintése
Régió II
« Válasz #28 Dátum: 2016. október 17. - 20:03:26 »
+6 Show voters
Nálam ezt a kört Reynolds nyerte

Régió II
« Válasz #29 Dátum: 2016. október 17. - 23:56:20 »
0 Show voters
Srácok majd ha ráértek sampalá csináljatok már egy Adatbázis szervert is köszönöm. (Hamár meg lesz a webszerver a liga által) :laugh: :laugh: :laugh: :laugh: :laugh: :laugh:
« Utoljára szerkesztve: 2016. október 17. - 23:58:17 írta Brian Harris »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal