Je možné na WZ nějak nastavit (změnit nastavení) user_agenta pro odesílání informací o přístupu ze skriptu PHP?
Po dlouhých peripetiích se mi nakonec podařilo pod localhostem na svém počítači úspěšně rozchodit skript využívající a zpracovávající data externího souboru XML z webu, který odmítal přístup komukoliv jinému než prohlížeči, použitím příkazu ini_set ve svém skriptu na radu samotného provozovatele onoho zdrojového webu, který se pouze chrání před amatérskými pokusy a zlými úmysly spammerů. Statickým záznamem do php.ini se mi stejně úspěšného výsledku docílit nepodařilo. Na wz jsem s rozčarováním zjistil, že výše zmíněný příkaz pro nastavení user_agenta je zde zakázán.
Je tedy nějaká možnost, jak to odblokovat či nastavit, jako v případě implicitně zakázaného přístupu k externím zdrojům na internetu, nebo přišlo veškeré mé dosavadní úsilí korunované konečně úspěchem vniveč?
Reknu to takhle .. neni moznosz, jak to odblokovat :)
A jestli povazujes pouziti funkce ini_set za uspech, tak ano, zrejme prislo :))
___
Ale z druhe strany, alespon sis vyzkousel, co umis :)
Jestli považuju použití funkce ini_set za úspěch, tak ano?
Jak tomu mám rozumět?
Za úspěch považuji to, že se mi podařilo po dvou týdnech zprovoznit ten skript, navázat nerušené spojení s tamtím webem a získat z něj data, protože to ostatní, co jsem považoval původně za největší práci - totiž jejich zpracování - , jsem měl už všechno připravené (mnohem rychleji než jsem řešil tohle) a plně funkční.
Víš snad o nějakém lepším řešení než použitím této funkce? Sem s ním!
Je dobře, že provozovatel onoho webu chrání svá data před amatery. Ale asi se trochu spletl ve Vás. Hledat dva týdny řešení nad tímto problémem je pro zkušeného dost dlouhá doba. Zkušený je s tímto problémem hotový za pár hodin.
A zvolené řešení je klasický klikyhák jak z jednoduché řešení udělat řešení složité.
Pokud chcete programovat webové aplikace, tak musíte vědět i podstatu webu. Zde přesněji protokol HTTP. To znamená vědět co a jak se posíláji data. Součásti HTTP hlavičky je i user_agent, který klient posílá. Finta je v tom, že tato informace není nijak chráněna a lze ji jednoduše změnit.
Ve Vašem případě jste zvolil změnu user_agenta přes php.ini. Bohužel toto řešení je nešťastné a doplatil jste na to. Přístupovat a měnit ze skriptu systémové informace může pouze amatér. Je to pro server sebevražda. WZ je toho dobře vědomo a tak je proti tomuto chráněno. Takže na WZ měnit cokoli není možné. WZ je, pokud jde o ochranu, dost přísný. Z toho vyplívá, že Vaše aplikace zde nebude za žádných okolnosti fungovat.
Mluvím teď o druhé variantě a tím je funkce fsockopen(). Tato funkce je právě to, co celou dobu hledáte. Pokud jste ji zkoušel, pak špatně. Použití této funkce vyžaduje právě znalosti HTTP. Umí totiž posílat HTTP hlavičky včetně modifikovaného user_agenta. Tato funkce v PHP není jediná, která umí měnit hlavičku. Ve všech případech je zde nezprovozníte, pač buď nejsou dostupné nebo jsou na seznamu zakázáných funkcí.
Vřelé díky za vyčerpávající odpověď... ale nepotěšil jste mne.
Po tak dlouhém úvodu zavrhujícím způsob, kterým jsem na to nakonec šel, a kritizujícím dobu, kterou mi to trvalo, jsem s nadšením očekával mnohem prostší a na WZ funkční řešení. Za zkušeného se nepovažuji, řekněme někde mezi, ale jinak jakési obecné více či méně teoretické povědomí o HTTP včetně hlaviček mám, jsem spíše ztracen v konfiguraci Apache a začátečník až mírně pokročilý (těžko říct, co si kdo pod těmito pojmy představí - to asi nejvíc záleží na tom, co dotyčný sám umí) v PHP a neznám a neovládám všechny funkce a možnosti, jimiž disponuje.
Na funkci fsockopen() jsem přirozeně během těch dvou týdnů (nebylo míněno čistého času) narazil a hádám, že bych ji zvládl zprovoznit, kdybych s ní hned na začátku neskončil na Vámi zmíněném faktu, že je na WZ rovněž zakázána, pročež mi není jasné, oč je způsob, který jsem nakonec použil, složitější, jak píšete, než tato funkce a čím jsem tedy na jeho použití doplatil. Připouštím, že nevím, jaký je mezi těmito dvěma způsoby jiný rozdíl, ale oběma - byly-li by dostupné - bych zřejmě dosáhl stejného výsledku, funkčnosti svého skriptu.
Tak či tak, díky za odpověď, ač pro mne velmi nepříznivou... Takže opravdu už žádný další způsob není?
S podrobnějším nastavením přenosu, jakým je změna hlavičky, či definovaní hlavičky, tady na WZ nepochodíte. Paradoxně do toho patří i POST metody.
Jiná situace je použití metody GET. Tedy primitivní HTTP přenos. Ta zde shodou okolnosti funguje. Je potřeba ji pouze aktivovat.
Ale zpět. Proti Vaši metodě nic nemám, ale je lepší se vyhnout jakýmkoli zásahům do systému.
Trošku jsem zkoumal tuto metodu, pač jsem se s tím ještě nesetkal. Ale věděl jsem, že v php.ini lze změnit user_agenta.
Na jedné stránce jsem narazil na použití ini_setu:
ini_set('user_agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9');
což jste asi použil. A zároveň na téže stránce jsem narazil i na použití .htaccess
php_value user_agent Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9
Takže když tak to zkuste ještě přes .htaccess. Pokud to nevezme, tak asi není jiná možnost.
Neni ini_set nahodou zakázána uz v klasickem safe_mod? Rozhodne bych se vyvyroval jejiho pouziti ..
(Uz narpiklad kvuli tomu, ze muzete mit 2 ruzne skritpty, kde se kazdy chce identifikovat jinak ;)
Funkce fsockopen() je (nejen) pro HTTP dostacujici :))
A klasicke fget() nebo fopen() pro jednoduche (napr. GET) HTTP pozadavky je jeste lepsi ;) (pozn.:lze i na WZ)
___
Ono plati jednoduche pravidlo, ze vsechna komunikace nejakou dobu trva a i v dnesni dobe se vyplati setrit vzdy a vsude.., - na co je potreba socket, kdyz napr. staci stahnout staticky obsah? :)
Takže už to funguje a řešení bylo opravdu velice prosté a jednoduché a bylo to přesně to, na co jsem se hned na začátku ptal - jestli není nějaká možnost to omezení související s nastavením user_agenta odblokovat nebo jej nastavit nějak podobně, jako lze odblokovat implicitně zakázaný přístup k webu ze skriptů, tedy v souboru .htaccess.
Psal jsem, že se moc neorientuji v nastavení Apache a to je jeden ze dvou hlavních důvodů, proč jsem k pokusu o toto řešení nepřistoupil sám dřív, než jsem zde založil toto téma. Ten druhý pak byl ten, že jsem předem pochyboval o tom, že by bylo možné měnit nastavení související se zakázanými funkcemi, a tak jsem si nedal patřičnou práci s tím si příslušný řádek nastavení najít na internetu sám. Tímto chci poděkovat Tomíkovi za zmínku o nastavení user_agenta v souboru .htaccess, které jsem nakonec s výraznými pochybnostmi použil a docílil tak kýženého výsledku.
Zároveň jsem zjistil, že zdrojovému serveru ani tak nevadilo nastavení user_agenta na "PHP", což ve skutečnosti bere, jako spíš žádné nastavení user_agenta. Na localhostu používám wamp a už jednou jsem se přesvědčil, že na ruční nastavení v konfiguračních souborech přilíš nereflektuje, nyní jsem si to připomněl, když jsem zjistil, že změny řetězce u user_agenta v php.ini nemají žádný vliv, zatímco použitím funkce ini_set a v .htaccess na WZ ty samé řetězce zpřístupňují zdrojový web, odkud jsem se celou dobu snažil načíst XML. Také proto jsem na localhostu nakonec dospěl až k funkci ini_set, ale nezaznamenal jsem, že by jí nastavená hodnota zůstala někde uložená a platná i poté, co jsem ji ze skriptu odebral, že by tedy změnila globální nastavení PHP.
Freezi: já jsem použil fopen na jednoduchý požadavek, ale server mi odepřel přístup, ne však jak se zdá proto, že by byl user_agent implicitně nastaven na "PHP", nýbrž že nebyl nastaven vůbec - zkrátka stačilo přiřadit právě tenhle řetězec a začalo to fungovat. A samozřejmě mi jde o data dynamická, jinak bych na to takhle složitě nešel.
=meggle=
Statickym obsahem stranky (xml) jsem mel na mysli jednoduche vstupni parametry (zadne nebo jen GET) ..
A k user_agent - vychozi hodnotou v ini je myslim prazdny retezec a ne "PHP" ;)
<HTML><span style="font-variant: small-caps;">Freeze: však to také meggle v závěru svého elaborátu uvedl. Každopádně jsem rád, že se problém podařilo vyřešit. Pokud to někdo v tom textu nechce hledat, uvádím řešení na konci (autorem je Tomík):</span>
Vložte do souboru <code>.htaccess</code> následující řádek:
<code>php_value user_agent PHP</code></HTML>