GeoGet: HttpAsk versus wget

Zdravím,
netušíte v čem je rozdíl:

Příprava http dotazu … nezkoumejte, o tom to není …:


a:='http://maps.google.com/maps/api/staticmap?center='+Lat+','+Lon+'&zoom='+zoom+'&size='+IntToStr(s)+'x'+IntToStr(s)+'&format=jpg&maptype=satellite&sensor=false&key=RwpQmySZzWpHjQ';


HttpAsk('GET',a,'','',http);
StringToFile(http,GEOGET_DATADIR+'\files\'+jpg);


  • zafunguje jednou, pak už ne …

RunExec('wget '+a+' -O files\'+jpg);

  • funguje opakovaně pro různé keše …

Nějaký nápad?

Zkousim to, a mas pravdu, druhy soubor ma nulovou delku. Jdu patrat, kde je chyba.

Aha… na ten druhy pozadavek to odpovi:

"This web site needs a different Google Maps API key. A new key can be generated at http://code.google.com/apis/maps/."

Ale proč ten opakovaný WGET nevadí? Nevadí ani pokud dám


wget -i soubor_s_5x_http

ani BAT:


wget http://maps.google.com...
wget http://maps.google.com...
wget http://maps.google.com...

  • všechny se stejným klíčem, ale různé souřadnice …

Dodatek: Včera jsem se domníval, že bude omezení na straně Googlu (asi tam nějaké je…) ale WGET to nějak obchází …

Tak vypatrano.

Httpask se od takto volaneho WGETu lisi ve dvou vecech:

  • pokud to jde, pouziva keepalives, tedy ze se pro kazdy pozadavek znova nepripojuje k serveru, ale vyuzije jez existujcii navazan spojeni. Toto jsem vyzkousel, ze googlu nevadi!

  • nastavuje automaticky referer hlavicku, coz je presne to, ceho se google chyta! Asi usoudi, ze ten API klic nebyl vystaven pro ten podivny server maps.google.com. :o

Protoze myslim, ze nastavovani referera je obecne spravna myslenka, jen ji hce asi pojmout trosku jinak. Rika o dalsi funkci, kterou by se Referer dal prenastavit ci smazat, aby si tam programator mohl nastavit co uzna za vhodne.

Potvrzuji, WGET -i postupuje stejně a funguje

Snažil jsem se zaregistrovat klíč na maps.google.com a nejde to … :frowning:
Osobně bych ten referer vyhodil, protože v tomto pojetí nemá žádnou vypovídající hodnotu, ty dotazy jsou "odnikud" …

to platí pokud je v refereru to co v něm má být, tedy uri, ze které byl požadavek na stažení. A naopak se posílat nesmí, pokud zdroj požadavku uri nemá. Jestli správně chápu rfc.

Díky, náčelníku, že jsi se mě zastal …

Tak


HttpAsk('GET','','','',http);

před skutečným voláním zabralo … B)

To maji byt argumenty aby to nikdy zadneho referera neposilalo? To bud nemyslite vazne, nebo nevite s cim polemizujete. :o

I kdyz tu ty RFC odrecutujete, tak to nic nezmeni na tom, ze referer je v nekterych situacich nejen uzitecny, ale i nutny! Proto jej chci umoznit programatorum skriptu nastavit tak jak chteji a nahradit tim tu neprilis chytrou automatiku, ktera tam ted je.

Takze trvam na tom, ze posilani referera je dobra myslenka. Smirte se s tim.

Posílání referera je dobrá myšlenka, pokud je to url … A jaký má skript běžící v GeoGetu url?
Asi bych to udělal naopak - bude prázdné (žádná stránka), ale pokud někdo chce a potřebuje, může si to nastavit.

on snad někdo napsal, že se nesmí posílat nikdy? Jen jsem zdůraznil, že musí být použit správně. A cituju rfc, co správně znamená, aby nebyly pochyby.
edit: aa, tak teď už napsal :slight_smile:

v refereru je uri odkud vznikl požadavek na stažení něčeho jiného. tedy pokud GeoGet stáhne něco z nějaké url a v tom staženém je odkaz na něco jiného, tak už by se referer měl nastavit na tu předchozí url, ze které vznikl požadavek. Stejně jako to dělá browser.
edit: nebo jinak. nejde o adresu skriptu, ale kde se ta stahovaná adresa objevila. Pokud ji skript vykouzlí ze vzduchu, referer neni, pokud jí skript přečte z nečeho, co už adresu má, tak referer je.

URL ma treba ta stranka, jejiz stahovani, vcetne objektu na strance, chces ve skriptu simulovat. Jasne?

A jak tu vymyslis, jak to s tim refererem lepe udelat, tak uz se nenamahej. Ja to tak uz pred pulhodinkou udelal. :smiley:

Souhlas. Natvrdo napsané ve skriptu


HttpAsk('http://www.geocaching.cz/was?id=37' )

referer nemá (protože skript nemá url)…