Üdv!
Szeretnék egy olyan megoldást az egyik weblapomra, hogy egy gombnyomásra egy JS megnyit egy php filet, de HTTP queryvel, mivel a php kimenetelére lenne szükségem, amit utána beolvasok egy változóba, úgy, hogy eközben a weblap ugye nem töltődik újra, és nem lép át másik lapra, etc... Az a baj, hogy nem tudom, hogy hogyan is kereshetnék erre, mi ennek a neve... Gondolom valami AJAXos izébizét keresek. Akinek van valami megoldása, vagy tippje az ne fogja vissza magát :)
köszi ;]
- 3719 megtekintés
Hozzászólások
van tobb megoldas is
de itt van peldanak: http://www.w3schools.com/ajax/ajax_httprequest.asp
- A hozzászóláshoz be kell jelentkezni
köszi, működik is ;]
- A hozzászóláshoz be kell jelentkezni
működik a dolog, de van itt egy apróság... Szeretnék egy másik webszervernek is küldeni így adatokat, de nemtudom, hogy a szerevr címét hol lehetne megadni, vagy miként:\ az XMLHttpRequest() objectnek nem láttam ilyen propertyjét..
- A hozzászóláshoz be kell jelentkezni
Az open metódus második paramétere az URL:
var req = new XMLHttpRequest();
req.open('POST', 'http://example.org', false);
req.send(null);
- A hozzászóláshoz be kell jelentkezni
Fura a dolog, mert ennél a sornál elakad:
http_request.open('GET', 'http://sinuslink.hu/?oldal=stat', false);
és a webszerver logjában sem látom, hogy próbálkozna... :\ Ötlet?
szerk.: Error: uncaught exception: [Exception... "Access to restricted URI denied" code: "1012" nsresult: "0x805303f4 (NS_ERROR_DOM_BAD_URI)" location: "http://ittmegitt Line: 29"]
A probléma az lesz, hogy másik szerverhez nemigazán lehetséges konnektelni így, szerintem, de még googlezok...
- A hozzászóláshoz be kell jelentkezni
Igaz, ne haragudj, az XMLHttpRequest-tel csak az adott domain alá lehet kéréseket küldeni...
- A hozzászóláshoz be kell jelentkezni
korlátozottan jó megoldás:
a javascripteket bárhonnan be lehet tölteni. Ergó az idegen szervertől ilyen formában kell neked az adat:
callback_fuggveny(a_php_által_küldött_adat)
aztán beleinjektálsz a másik oldalon lévő kódodba kódodba egy ilyent:
ekkor meghívódik a callback_fuggveny, ami pedig lekezeli neked a kapott adatot. Persze ehhez az kell, hogy mindkét szerveren legyen némi dúlási jogod :)
Azt hiszem, yahoo pipes-szal bizonyos adatok valamilyen módon átalakíthatóak jsonp-vé, de még nem tudom, hogy hogyan is :)
egyszóval a kulcsszó: jsonp, allback
—-—-—
int getRandomNumber() {
return 4;//szabályos kockadobással választva.
} //garantáltan véletlenszerű. xkcd
- A hozzászóláshoz be kell jelentkezni
Az a baj, hogy a szerevren ahonnan getelni akarok adatot nincs semmi jogom :\ LEkell töltsek egy weblapot a kliens gépen, és aegy egyedi ID-t kell továbbadjak a saját cuccaimnak... Az egyedi ID-vel később a kliensgépen lehet majd dolgozni tovább... :)
- A hozzászóláshoz be kell jelentkezni
az ilyesmit biztonsági okokból tűzzel-vassal meg akarják akadályozni. Gondolj csak bele, egy ilyen módszerrel bizonyos körülmények közt pl. session id-t lehetne lopni.
Van a w3c előtt egy draft a cross-site http requestekről, miszerint akkor lehetne engedélyezni, ha a válaszheader tartalmaz egy paramétert – ez lehetővé tenné, hogy a szerver a kényes adatok letölthetőségét megakadályozza.
Ebből kifolyólag ha nincs hozzáférésed a másik szerverhez, javascriptből biztosan akadályba fogsz ütközni, ha a kliens böngészőjét és ip-jét kell használnod. Flash-t lehet, hogy tudsz proxyként használni.
Cuzammenfásszung:
- biztonsági okokból amit szeretnél, minden értelmes böngésző megakadályozza.
- a távoli szerver API-n keresztül szolgáltathat adatot
- vannak más szép jövőbeni kilátások is, de mindegyik azon alapul, hogy a távoli szerver teszi explicite hozzáférhetővé az adatokat
- ha nem olyan fontos a böngésző és IP, akkor megoldható: saját php proxyval, Yahoo pipes-szal. Utóbbira itt látsz egy példát, amit az ezen a linken látható módon lehet paraméterezni, hogy bele-dom-manipulálva a weboldaladba meghívja a neked tetsző callback függvényt, ami lekezeli az adatokat…
Az eredeti elképzelésedet okkal akadályozza meg mindenki.
—-—-—
int getRandomNumber() {
return 4;//szabályos kockadobással választva.
} //garantáltan véletlenszerű. xkcd
- A hozzászóláshoz be kell jelentkezni
jQuery-ben ez nagyon szépen és egyszerűen megoldható
- A hozzászóláshoz be kell jelentkezni
Tudnál rá mutatni egy példát plz? Mert amiket láttam a jQuery dologból, azok elég bonyolultnak tűntek... Csak egy weblapot akarok GETelni, hogy arról infót kiollózzak. köszi
- A hozzászóláshoz be kell jelentkezni
$("#elem-amibe-be-akarod-tolteni-az-adatot").load(url);
- A hozzászóláshoz be kell jelentkezni
hmm, kipróbáltam. Okosság, köszi, de ezzel is azt kapom h restricted URL sé ő nem konnektel nekem... ez wtf?:\
- A hozzászóláshoz be kell jelentkezni
hmm, kipróbáltam. Okosság, köszi, de ezzel is azt kapom h restricted URL sé ő nem konnektel nekem... ez wtf?:\
- A hozzászóláshoz be kell jelentkezni
Mint már feljebb elmondták, csak AZONOS domain alá tudsz kapcsolatot nyitni. Nem lehet, hogy ez a probléma? Google avagy same origin policy.
- A hozzászóláshoz be kell jelentkezni
Esetleg egy áthidaló megoldás lehet, ha a JS-ben (legyen az XMLHttpRequest vagy jQuery) egy saját domain alá tartozó PHP fájlt hívsz meg, amely (pl. cURL segítéségvel) elküldi a kérést a külső domainnek, majd annak a válaszát visszaadja a JS-nek.
- A hozzászóláshoz be kell jelentkezni
+1
Sőt, ha tudod, hogy ugyanarra a GET-re mindig ugyanazt a választ kapod, cache-elhetsz is, sokat dob a reakcióidőn.
- A hozzászóláshoz be kell jelentkezni
Vagy iframe-et raksz be, ha nem maga a tartalom erdekel, mert az megy.
http://prototype-window.xilinus.com/samples.html
(Open a window with an URL inside)
De ha mindenkeppen fel akarod dolgozni, akkor
<?php
echo file_get_contents("http://sinuslink.hu/?oldal=stat");
?>
Amit jo lenne, ha nem egyszerusitenel tul - nagyon szep ha parameterkent kapja az URL-t, csak azt open proxynak hivjak, es egy aranyos kis biztonsagi lyuk lesz belole.
- A hozzászóláshoz be kell jelentkezni
allow_url_fopen legyen mar off inkabb
t
- A hozzászóláshoz be kell jelentkezni
CUrl-lal is meg lehet csinalni, kerdes, hogy van-e lehetoseg a hasznalatara. Ha nincs... :S
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
ha nincs... akkor legyen!
nehogymar 2009-ben allow_url_fopen legyen! holnap meg majd register_globals :)
t
- A hozzászóláshoz be kell jelentkezni
Nem igazan erzem, ha valamin megy a curl_exec($url), de nem megy a fopen($url), az mi a franctol biztonsagosabb... Az, hogy mitol lassabb, azt tudom, meg hogy mitol erthetetlenebb, es elsosorban ez szamit.
"jajj majd ha feltorik a programodat" -> ha valaki olyan URL-t tud adni a fopennek, vagy ad absurdum require-nek/include-nak, amit nem kene, valszeg mas bajok is lesznek a szoftverrel. Egy olyan script, ami egy konstans URL-rol ker le valamit, nem ez a kategoria.
Hasonloan, remelem erzed, a srac se a nemzeti banknak ir epp intranet programot (legalabbis remelem). Ilyen esetekben meg a funkcinalitas a lenyeg, az egyszeru valaszok. Mint ahogy a programozas se arrol szol - jo, kivetel: security engineer - hogy hogy tudod a leheto legbiztonsagosabban megfogalmazni a kerdest: Arrol szol, hogy tudom a leheto legkifejezobben megfogni az adott funkcionalitast. A security egy jarulekos dolog. Egyebkent 15 sor curl alapon stream-drivert fejleszteni kb, es maris ismet van fopen-ed, amit pl. lekorlatozhatsz csak adott domainekre (a legnagyobb baj, hogy ezt a mostani beepitett http driver nem tamogatja, nem az, hogy meg lehet nyitni kenyelmesen is tavoli eroforrasokat, mert az jo es hasznos).
- A hozzászóláshoz be kell jelentkezni
Szerintem igenis fontos a biztonság. Sőt, alapvető fontosságú: senki sem szeret ingyen pornó reklámot kapni a főoldalon.
- A hozzászóláshoz be kell jelentkezni
Ha elolvasod a threadnek az elejet, ott vilagosan kifejtettem szerintem, hogy ezt a fopen-t csak ugy csinalja, ha KONSTANS url-sztringet ad at neki. Namost ha ugy atcsusszannak a porno oldalak, az csak ugy lehet, ha valaki az URL-en levo oldalt feltorte elozoleg.
A bajom az ilyen tipusu security gondolkodassal, az hogy a programozonak nem az a feladata, hogy biztonsagot csinaljon, a programozonak az a feladata, hogy funkcionalitast biztositson. Ehhez kepest a security masodlagos. Nem nem fontos, nem sokadlagos, de cseszhetem ha van egy szuperbiztonsagos hello worldom, mikozben nekem operacios rendszerre lenne szuksegem.
Ezt fejtettem ki az elobb. Egy szoval nem emlitettem, hogy nem fontos a biztonsag. Azt mondtam, hogy tema szempontjabol mind1.
- A hozzászóláshoz be kell jelentkezni
Hmm, igen, ez nekem is eszembe jutott, hogy PHPval egyszerűen le lehet getelni a cuccot, csak az oldal amire szükségem van az IP és a böngésző alapján generál egy kulcsot, számomra ismeretlen algoritmussal, és ezért kellene mindenképp JSből megoldjam :\
- A hozzászóláshoz be kell jelentkezni
Ezt fejtsd ki hosszabban:
- Pontosan mi az az informacio, amit viszont szeretnel latni
- Pontosan milyen formaban
- Pontosan hol.
(Merthogy a cross domain policy-t megvaltoztatni nem lehet, viszont megkerulni? az egy masik kerdes :)
- A hozzászóláshoz be kell jelentkezni
Bocsánat, de nem mindegy, milyen kulcsot generál?
Számára az IP a te szervered címe lesz, böngésző meg... amit hazudsz neki :)
Nem PHP-zok, de gondolom ahhoz is van olyan osztály, mint a .NET HttpWebRequest-je, amivel akár egy teljes sessiont is "szimulálhatsz".
(Sőt, végső soron nc-vel is meg lehet oldani :)
- A hozzászóláshoz be kell jelentkezni
Mar miert lenne mindegy? A session id fontos valami, ugyanis ezzel lehet megelozni a session lopast. Foleg ha router mogott vagy, egyaltalan nem biztos, hogy az IP a te geped IP cime lesz. Lehet, hogy egyben meg 8 masik gepe is.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Olvasd el, mire válaszoltam...
- A hozzászóláshoz be kell jelentkezni
up
- A hozzászóláshoz be kell jelentkezni
Miért is up? Téged is érdekel? Akkor kérdezz Te is. Ha nem kérdezel, nem tudunk segíteni, a megoldást pedig már elmondtuk. :)
- A hozzászóláshoz be kell jelentkezni
nem a tema miatt
(maganugy)
- A hozzászóláshoz be kell jelentkezni
Én speciel ezt az egész cross-site scriptinget hülyeségnek tartom, mivel sok hasznos feature-t is elveszítünk vele, és ráadásul egy egyszerű módon megkerülhető: iframe. Mondjuk annyi előnye van, hogy xmlreq esetén nincs csík, a user nem látja, hogy az oldal töltöget a háttérben, míg iframe-nél látja.
Egyébként a menet a következő:
1. iframe loader id-val és name-el
2. document.getElementById('loader').src=URL
3. vársz, míg betöltődik (ez a trükkös rész)
4. eztetdolgozdfel=loader.document.body.innerHTML
csont nélkül működik az ÖSSZES modern, biztonságosnak kikiálltott böngészőn nem-domain alatti url-re (sőt, régebbieken is, a fenti metódust pl IE6-ra csináltam eredetileg, mivel nem támogadta az xmlreq-et, így tettem kompatíbilissé).
- A hozzászóláshoz be kell jelentkezni
Csunya lenne, ha az iframes megoldas nem mukodne. Iframe-be eleg sok mindent szokas betolteni, meg reklamot is.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
furállottam a dolgot, úgyhogy direkt megnéztem, a firebug a következőt dobja:
"Permission denied for <http://127.0.0.1> to get property Window.document from <http://hup.hu>.
testiframe.html()testiframe.html (line 11)
[Break on this error] var x = setTimeout("alert(loader.document.body.innerHTML)", 5000);\n"
akkor az enyém biztonságosabb, mint a többi mai biztonságosnak kikiáltott böngésző ;)
a kód kb. ez volt:
<iframe name="loader" id="loader"></iframe>
<script type="text/javascript">
document.getElementById("loader").src = "http://www.hup.hu";
var x = setTimeout("alert(loader.document.body.innerHTML)", 5000);
</script>
—-—-—
int getRandomNumber() {
return 4;//szabályos kockadobással választva.
} //garantáltan véletlenszerű. xkcd
- A hozzászóláshoz be kell jelentkezni
Jé, és igazad van. Tényleg javították az FF3.5-ben.
- A hozzászóláshoz be kell jelentkezni
Akkor ha jól értem JS-el kb lehetetlen lekérni egy másik domain alatt lévő weblapot:\
- A hozzászóláshoz be kell jelentkezni
Ez azert igy tulzas. mondom, tudni kene, mit akarsz.
Pelda: irsz php-ban egy proxy-t. Nem nagy cucc, viszont jo esellyel a budos eletbe nem veszi eszre a szerver, hogy nem is az igazi klienstol jott a keres, mert az apache el fogja rejteni a proxy IP-cimet. Remelhetoleg :)
- A hozzászóláshoz be kell jelentkezni
Ezt nem teljesen értem... Ha az apache oldaláról megy a kérés akkor az nem a kliens ipjével fog menni, és nekem az kellene. Tehát a proxynak a kliens oldalon kellene így lennie. Vagy félreértek :)
- A hozzászóláshoz be kell jelentkezni
ilyenkor az egyszeri programozó, aki eddig nem tette meg, leül szépen, és újragondolja.
Miért kell neked pl. a kliens ip-je meg a böngészője? Eddigi információink alapján hozzá kell férned valamihez, amihez a kliens is, mégpedig auoimatizáltan.
A legtöbb weboldalnak közömbös a kliens ip-je, ami az azonosítást illeti. Igen, a böngészője is. Azonos kliensről és böngészővel sokszázan is netezhetnek pl. egy NAT mögül. A szolgáltatások sütikkel azonosítják a delikvenseket. No, azt nemigen fogod ám a kliensektől kiimádkozni.
Legegyszerűbb, ha bekéred az azonosítókat, és bejelentkezel a szerveroldali proxyddal. Ha ezt meg lehetne kerülni, már rég a fél internet a mailjeidet olvasná.
—-—-—
int getRandomNumber() {
return 4;//szabályos kockadobással választva.
} //garantáltan véletlenszerű. xkcd
- A hozzászóláshoz be kell jelentkezni
Ja, igen... Akkor nem egyről beszélünk :) Nem loginról, meg session-ökről van szó itt... Hanem egy tök egyszerű, login nélküli weblapról, amibe belegenerálnak egy gondolom IP-től és egy böngészőtől függő hash-t...
- A hozzászóláshoz be kell jelentkezni
<?php
$ch = curl_init() or die(curl_error());
//tavoli weboldal, azaz a celpont
curl_setopt($ch, CURLOPT_URL,"http://weboldal-aminek-kell-a-forrasa.php?get-parameterek=ha-kellenek");
//ha szeretnel POST-olni ertekeket
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"postolni-kivant-param=ertek&kovetkezo=ertek");
//kerjuk vissza az eredmenyt valtozoba bele, jol
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$forras=curl_exec($ch) or die(curl_error());
echo $forras //lemented, megjelenited, azt csinalsz vele amit akarsz
//viszlat
curl_close($ch);
?>
Ennyi. Nem kell frame, javascript, semmi.
- A hozzászóláshoz be kell jelentkezni
X-Forwarded-For?
Ha szerencsed van, akkor transzparens modon azt hiszi IP-nek az alkalmazas, nem pedig azt, amitol tenylegesen jon a keres. Ezt egyes rendszerek elrejtik, masok nem... egy probat meger. A bongeszo adatait meg siman at tudod kopizni, sot, minden request header-t...
- A hozzászóláshoz be kell jelentkezni