[ sharpshooter @ 03.11.2004. 10:20 ] @
Dobar dan dobri ljudi!!


Imam sledeći problem:

Imam server, koji prima zahteve preko HTTP protokola, metod POST. Pošaljem mu XML fajl sa upitom, a on treba da mi vrati XML fajl sa podacima. Sve je to u teoriji lepo, ali ja ne znam kako da serveru prosledim XML podatke. Probao sam prvo da sastavim formu u HTML-u, ali to nije radilo jer se forma šalje u formatu koji server ne raspoznaje. Onda sam probao sa JavaScriptom, varijanta XMLHttpRequest, ali ni to nije radilo, jer, zbog sigurnosti, skript ne može da šalje ili dobija podatke sa drugog domena. Da li neko zna za neki "softnjer" koji može da pošalje XML upit na server i da primi odgovor od servera? Kad dobijem XML fajl, ostalo je lako (u smislu da izvučem podatke iz njega). Ako treba, pojasniću stvari detaljnije. Svaka pomoć je dobrodošla.

Hvala unapred.

Ispravka:

Na clientu nemam ništa. Klijent je moj komp u firmi. Treba mi rešenje za client. Ne znam šta je na serveru. Imam schema fajlove, tako da znam kako treba da formatiram upit. Ono što je problem je to što ne znam kako da pošaljem upit na server. Sve podatke koje imam o serveru su (slobodni prevod sa ukrajinskog jezika):

"Razmena podataka između klijenta i servera je u formatu XML. Protokol koji se koristi za transport je HTTP. Za upite se koristi metod POST. Šema idetifikacije je basic. Content-Type:text/xml. URL=http://catalog.ean.ua/interface/call"

U suštini, preko HTTP protokola pošaljem XML i dobijem XML nazad. Probao sam sledeće ali to ne radi (fajl se nalazi kod mene na hardu):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Form</title>
<script type="text/javascript">
function zeka()
{
xmlhttp = new XMLHttpRequest();
xmlhttp.setRequestHeader("Content-Type","text/xml");
xmlhttp.open("POST","http://catalog.ean.ua/interface/call",false);
xmlhttp.send("<?xml version="1.0" encoding="UTF-8"?><GetList><gln>4820039800008</gln><maxRows>-1</maxRows></GetList>");
document.write(xmlhttp.responseText);
document.close()
}
</script>
</head>
<body>
<button onclick="zeka()">Zeka</button>
</body>
</html>


Možda ovaj script i nije u potpunosti tačan (u smislu poslednja dva reda funkcije zeka()), ali problem je u tome što, kada zovem metod open(), Mozilla daje poruku "Error: uncaught exception: Permission denied to call method XMLHttpRequest.open". Ovo se dešava (u ovo nisam siguran), zbog sigurnosti, tj. nemogućnosti skripta da koristi ovaj metod ako se stranica ne nalazi na domenu koji je ukazan u parametru URL metoda open.

Ono što je meni potrebno, nije rešenje za ovaj skript, već bilo kakav client software koji može preko HTTP-a da pošalje XML i primi i opciono snimi XML koji pošalje server.

Za sva rešenja i odgovore unapred zahvaljujem!!!

Pozdrav svima!


[Ovu poruku je menjao sharpshooter dana 03.11.2004. u 13:06 GMT+1]

[Ovu poruku je menjao sharpshooter dana 03.11.2004. u 16:24 GMT+1]
[ jablan @ 03.11.2004. 10:24 ] @
Nisi rekao koji softver imaš na klijentu a koji na serveru. U zavisnosti od toga, mislim da ova tema ide pre u pripadajući forum (.NET, PHP, Delphi, JScript), nego u XML.
[ -zombie- @ 03.11.2004. 16:17 ] @
iz JSa neće da može.. ili bar ne bez neke "proxi" skripte (recimo php) na tvom serveru..

a ako te interesuje da to odradiš iz drugog jezka, onda stvarno treba da navedeš koji te zanima.. većina verovatno ima i biblioteke koje su na malo "višem" nivou, ali možeš i da se spustiš do nivoa socketa.. evo ti pseudo-kod kako bi to izgledalo..

1) otvoriš socket konekciju ka njihovom serveru, port 80 (verovatno)
2) pošalješ zaglavlje.. ovako nekako:
Code:
POST /interface/call HTTP/1.0
Host: catalog.ean.ua
Content-Type: text/xml

3) pošalji jedan prazan red, a zatim i xml zahtev
4) primi xml odgovor
5) parsiraj ga i radi šta god..

eventualno možda treba da pošalješ i Content-Length: 1234 heder, gde je 1234 dužina tvog xml zahteva (izmeri pre slanja)..
[ sharpshooter @ 04.11.2004. 10:47 ] @
Thanks -zombie-, ali to je baš ono što sam hteo da izbegnem - pisanje bilo kakve aplikacije. Razmena podataka u XML-u bi trebalo da je do sada manje ili više rešena, pa ja ne bih, ako ne moram, da izmišljam toplu vodu. Mislio sam da postoji neko već manje ili više gotovo rešenje. BTW, bio sam kod tebe na blogu, mnogo mi se dopada "napredni test inteligencije". Jednostavno i, verovatno, vrlo efikasno. Pozdrav.
[ -zombie- @ 04.11.2004. 17:26 ] @
pa nije izmišljanje tople vode.. ta "aplikacija" kako ti kažeš ne bi imala više od par redova.. ne znam zašto je to toliki problem.. pa ionako trebaš da parsiraš taj xml negde, i uopšte uradiš nešto korisno sa njim.. nije ništa komplikovanije od ekvivalentne "aplikacije" u JSu..

a rekoh, možeš i uz pomoć JSa, samo ti treba i jedna skripta na serveru koja će da glumi proxi (primi zahtev, prosledi ga njihovom serveru, primi odgovor, prosledi ga tebi)..
[ S a l e @ 07.11.2004. 14:24 ] @
I ja moram da napravim jednu takvu "aplikaciju" za slanje podataka na server. Tj. iz excel datoteke u MySQL bazu, za web site, i za teletext preko XML RPC... Nasao sam ovaj site www.xmlrpc.com - kako nemam nekog velikog iskustva oko phpa, xmla i uopste programiranja, moracu malo vise da se zainteresujem
[ gonadarian @ 09.11.2004. 01:54 ] @
Citat:
xml version="1.0" encoding="UTF-8"?>
Primetio sam da u šemi koju drže na sajtu ne koriste UTF-8, nego WINDOWS-1251. Nemam pojma koliko je ovo bitno.
Citat:
xmlhttp.open("POST","http://catalog.ean.ua/interface/call",false);
Metoda open može da ima i više parametara. Tačnije - još dva: Username i Password. Kada sam pokušao da u browser ukucam link http://catalog.ean.ua/interface/call, dobio sam odgovor "HTTP Status 401 - This request requires HTTP authentication" što je, cenim isti odgovor koji i ti dobijaš.

Na sajtu http://catalog.ean.ua vidim da ima nešto što liči na registraciju... Možda da probaš prvo to da odradiš?
[ sharpshooter @ 09.11.2004. 09:31 ] @
Citat:
gonadarian: Metoda open može da ima i više parametara. Tačnije - još dva: Username i Password. Kada sam pokušao da u browser ukucam link http://catalog.ean.ua/interface/call, dobio sam odgovor "HTTP Status 401 - This request requires HTTP authentication" što je, cenim isti odgovor koji i ti dobijaš.

Na sajtu http://catalog.ean.ua vidim da ima nešto što liči na registraciju... Možda da probaš prvo to da odradiš?


Odradio sam registraciju, imam i username i password, ali to nije od suštinke važnosti za problem, a i nisam hteo da smaram ovde još sa authentication. Što se tiče encodinga, i to je sporedno pitanje koje je lako rešivo, glavno je dostaviti upit na server. Thanks u svakom slučaju.
[ -zombie- @ 09.11.2004. 21:46 ] @
da, to nema nikakve veze, pošto xmlHttpRequest NE SME da uputi zahtev ka drugom serveru (osim onog sa koga je JS skripta), a kako on ne može da stavi svoju skriptu na njihov server.. ;)

nego, setih se još jedne mogućnosti.. pošto si napomenuo da sve ovo radiš iz mozile, možda da probaš da skriptu ubaciš na mesto odakle je dozvoljeno tzv "privilegovano" izvršavanje skripti, odnosno gde nema restrikcija po pitanju domena ka kojima smeš da upućuješ zahteve..

zaboravih da li je dovoljno skriptu ubaciti u chrome direktorijum u profilu/install-diru mozile, ili se mora praviti package (tj extenzija)..

ako ti ova solucija odgovara, i ako ti treba još detalja, viči slobotno, verovatno ću moći da ti pomognem..
[ bluesman @ 10.11.2004. 06:27 ] @
Pogledajte malo www.nomak.info . Ima dosta toga da se nauci, a jedino mi je zao sto ne mozete da vidite "ispod haube" jer ono sto se vidi je samo 1% od onoga "ispod".
[ sharpshooter @ 10.11.2004. 09:57 ] @
Citat:
-zombie-: da, to nema nikakve veze, pošto xmlHttpRequest NE SME da uputi zahtev ka drugom serveru (osim onog sa koga je JS skripta), a kako on ne može da stavi svoju skriptu na njihov server.. ;)

nego, setih se još jedne mogućnosti.. pošto si napomenuo da sve ovo radiš iz mozile, možda da probaš da skriptu ubaciš na mesto odakle je dozvoljeno tzv "privilegovano" izvršavanje skripti, odnosno gde nema restrikcija po pitanju domena ka kojima smeš da upućuješ zahteve..

zaboravih da li je dovoljno skriptu ubaciti u chrome direktorijum u profilu/install-diru mozile, ili se mora praviti package (tj extenzija)..

ako ti ova solucija odgovara, i ako ti treba još detalja, viči slobotno, verovatno ću moći da ti pomognem..


Evo vičem :))

-zombie-, ako bi ovo moglo da se uradi iz JS-a, bilo bi odlično. Ako imaš vremena i mogućnosti, molim te vidi da li bi radilo ovo sa "privilegovanom" skriptom. Moram da napomenem da sam ja manje ili više kompletni duduk što se tiče JS-a. Onaj gore kod je rezultat čitanja raznoraznih tutorijala na netu, suma sumarum jedno sat i po. Da ne kažem da sam skinuo i RFC 2616 i Windows Sockets API guide i da sam toliko očajan da sam već bio spreman da to sve "zgovnam" u C-u. Ako hoćeš, mogu da ti pošaljem i username i pass, pa (opet) ako imaš višak vremena i volje, možda i da probaš? (naravno, ne mislim da radiš moj posao, nego samo da proveriš da li radi, jer ako ne radi, ja verovatno neću moći da skontam zašto ne radi i gde grešim)

Veliko hvala -zombie-!!
[ S a l e @ 10.11.2004. 21:27 ] @
>
[ -zombie- @ 12.11.2004. 06:33 ] @
sale: ???


sharpshooter: evo, pogledao sam.. ipak nije baš prosto ubacivanje fajlova u chrome dir (tj chrome dir uopšte i nije obavezan), ali ipak nije previše komplikovano.. prati sledeći postupak:

1) napravi negde na disku (recimo c:\moz\sharpshooter) direktorijum gde ćeš držati skripte (poželjno je da putanja bude bez spejsova)

2) zatvori SVE prozore firefoxa, odnosno izađi iz njega

3) odi u svoj profil. to je recimo na \Documents and Settings\--user--\Application Data\Mozilla\Firefox\Profiles\12345678.default\

4) u diru chrome edituj fajl chrome.rdf

5) neposredno pred kraj fajla (tj ispred poslednjeg </RDF:RDF>) dodaj ovih par linija:

Code:

    <RDF:Seq RDF:about="urn:mozilla:package:root">
        <RDF:li RDF:resource="urn:mozilla:package:sharpshooter"/>
    </RDF:Seq>
    <RDF:Description RDF:about="urn:mozilla:package:sharpshooter" 
                c:baseURL="file:///C:/moz/sharpshooter/" />



posle toga, svim fajlovima koje ubaciš u ovaj dir (html dokumenti, JS skripte) ćeš moći da pristupiš preko URLa koji počinje sa chrome://sharpshooter/content/, i trebali bi da rade isto kao da su negde na disku ili nekom serveru.. (osim što će se JS skripte izvšravati u privilegovanom modu)
[ sharpshooter @ 14.11.2004. 13:51 ] @
zombie, evo upravo sam probao, radi k'o sat!!!!!!!
zombie genije si care nad carevima!!


E, našao sam nešto što će možda biti interesantno ostalima koji se bave XML-om i JavaScriptom, zove se XML for Script, http://xmljs.sourceforge.net/

zombie, još jednom veliko hvala za uložen trud i znanje.

Pozdrav.
[ S a l e @ 12.12.2004. 03:19 ] @
Da li neko ima malo prostijih primjera za rad sa XML RPC, jer implementations na XMLRPC.org je previse komplikovano? Konkretno PHP...
[ S a l e @ 24.05.2005. 01:56 ] @
Da li moze malo pomoci na ovu temu? :)

Dakle kako odraditi slanje na xml-rpc server iz HTML forme via PHP ili iz Visual Basic aplikacije...