**Noname píše:** omlouvám se za dotaz, ale je tu mnoho znalých lidí, kteří možná znají odpověď na jeden problém – Seznam.cz umožňuje přidat si na homepage RSS zdroje, mezi pár vyvolenými servery, které jsou nabízeny standardně je dokonce i Marigold.cz. Problém je, že po migraci Seznam odmítá nové RSS akceptovat, ukazuje stále staré články. Přitom původní adresy na RSS zdroje jsou funkční (mod rewrite).
Hlavně ale Seznam odmítá akceptovat i když dám přidat konktrétní adresu na Marigoldí RSS zdroj, nezkousne ani http://www.marigold.cz/feed (plně validní RSS 2.0 zdroj), ani http://www.marigold.cz/wp-rss2.php (to samé bez mod rewrite), ani http://www.marigold.cz/wp-rss.php (RSS 1.0 zdroj). Nevíte někdo nějaký fígl jak udělat RSS zdroj, který Seznam „sežere“? (p.s.: support linka Seznamu samozřejmě nefunguje)
Děkuji za přihlášení. Nyní je přihlášení potvrzeno. Kdyby vám nechodily newslettery, podívejte se prosím do SPAM složky a označte email jako že není spam. U Gmailu tam bude téměř jistě :(
wu: nevím, musel bych to všechno zkoušet a těch možností jsou mraky. Je to plně validní RSS feed a čtečky s tím nemají problém, takže rozhodně bude chyba někde u nich. Ten wordpress feed skript je taky standardní, neměnili jsme na něm ani tečku, takže by se to teoreticky mělo týkat všech wp feedů, jenže netýká – jiné feedy z jiných wp serverů fungují. Možná tam zůstaly nějaké divné konstrukce z předchozího systému, ale prostě nevím kde je problém
Podíval jsem se na hlavičky od serveru a je tam několik podivností. Např. chybí Content-Length. Ale já osobně vsázím na tohle: Content-Encoding: gzip. Zkusil bych to vypnout …
wu – zkusil jsem, nepomáhá, zkusil jsem nastavit jen jeden RSS příspěvek, tj. zobrazoval se tam jen tento (takže ani staré články to nemohly způsobovat) – nefungovalo to. Nastavil jsem, aby tam dával jen výtah místo celého článku, nepomohlo to.
Moc se v tom nevyznám, ale třeba blog Filipa Rožánka blok.rozanek.cz , který je myslím také na WordPressu mi na Seznamu funguje. (narozdíl od např. Panacek.com který také jako vy nefunguje)
no že by chtěli po xml feedech aby byly s text html deklarací a typem se mi nezdá, ten content-length by asi u blbých systémů mohl být problém (je to ovšem nepovinný parametr), the question is, jak jej tam dostat, netuším jak spočítat kolik bude mít rss feed bytů. Filip používá prastarý wordpress (1.5), takže to nemusí být vůbec tím.
Ještě bych zkusil uložit hotové RSS jako xml soubor, dát na server a nechat ho Seznamem načíst. Pokud to projde, je to v nějakém nastavení pro posílání dynamických souborů.
18:31:16$~/Desktop/cz-local-search/img>telnet http://www.marigold.cz 80
Trying 217.11.242.16…
Connected to marigold.cz.
Escape character is ‚^]‘.
GET /feed/ HTTP/1.1
Host: http://www.marigold.cz
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2006 17:29:26 GMT
Server: Apache
X-Pingback: http://www.marigold.cz/xmlrpc.php
Last-Modified: Thu, 09 Nov 2006 12:51:17 GMT
ETag: „06144929e5dad2a42005342aab0cacf1“
Status: 200 OK
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml; charset=UTF-8
18:31:16$~/Desktop/cz-local-search/img>telnet http://www.marigold.cz 80
Trying 217.11.242.16…
Connected to marigold.cz.
Escape character is ‚^]‘.
GET /feed/ HTTP/1.1
Host: http://www.marigold.cz
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2006 17:29:26 GMT
Server: Apache
X-Pingback: http://www.marigold.cz/xmlrpc.php
Last-Modified: Thu, 09 Nov 2006 12:51:17 GMT
ETag: „06144929e5dad2a42005342aab0cacf1″
Status: 200 OK
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml; charset=UTF-8
To „79b2“ mi připadá podezřelý, myslím, že to tam nemá co dělat. Podíval bych se, jestli tam neposíláš identifikační byty UTF-8.
Ale možná je to i něco jinýho 🙂
ad Pachollini: Poprvé vidíš chunked (nakouskovaný) přenos? Ten začátek není příznak utf-8, to je délka příslušného kousku (chunk).
Aby se nakonec neukázalo, že géniové v Seznamu neumí http/1.1 (umět chunked je povinné 🙂
Aby byl v response Content-Length se da vetsinou nastavit i na urovni HTTP serveru. Problem je v tom ze u skriptovanych veci se na zacatku nevi kolik dat se bude posilat, proto je to nevyplnene. Ale da se nastavit, aby se skriptovane veci nejdriv poskladaly na serveru, ohlavickovaly skutecnou velikosti a potom se teprve odesilaly na klienta. Mozna bych si vzpomnel kde je to u IIS, jednou jsem to tam nastavoval jako rychly workaround chyby moji aplikace 🙂
Nicmene jako dlouhodobe reseni bych to nedoporucoval, navic bych to jako pricinu skoro vyloucil. Na Content-Length se neda spolehat nikdy a Seznam by mel mnohem vetsi problemy kdyby bez nej neumel pracovat.
… a jeste jeden napad: zkusil bych se zamerit na to jaka prijde hlavicka requestu ze Seznamu (odchytit ji v logu) a jaky skutecne response se vrati po tomhle requestu (na to se da vyuzit treba ta hlavicka a poslat znovu). Napriklad by podle me mohlo byt v hlavicce requestu zajimave Accept-Charset nebo Accept-Encoding.
Koukám že jsme se trochu posunuli. Zkusil bych přidat content-length, vypnout chunked (Martin by mohl mít pravdu) a ten zip, no já nevím, možná taky. Aby to bylo co nejpodobnější statickému xml.
Robot, který stahuje stránku při prvním kontaktu, používá „GET **http://www.marigold.cz**/wp-rss2.php HTTP/1.1“. Marigold na to vrátí *404* a pak soubor vypíše (?). Pokud se volá jen „GET /wp-rss2.php HTTP/1.X“, vyhodí server klasicky *200*.
No a Seznam vcelku pochopitelně kontroluje nejdřív hlavičky a na těch se zarazí.
re Jan – děkuji, to je zajímavá informace že Seznam používá tenhle způsob určený pro anonymní proxy. To bude zřejmě ta chyba, předpokládám, že to je o nějakém nastavení u poskytovatele, dnes v 18:00 se bude konečně přecházet na ten nethost, tak se mi na to pak kouknou
Sice byl problém už vyřešen, ale ještě doplním – pokud je transfer-encoding chunked, pak je nesmysl posílat i content-length! Plyne to už z principu – chunked je určen pro případy, kdy nevíme celkovou délku a posíláme odpověď po kouscích (u kterých délku známe).
Každý kdo se montuje do web aplikací by měl mít protokol http nastudovaný!
29 komentářů
http://ilblog.sblog.cz/
Nevezme mi ani jednu z těch tří rss adres.
1) má content-length
2) servíruje content type text/html
3) nemá v xml úvodní xml deklaraci
http://web-sniffer.net/?url=http%3A%2F%2Fwww.marigold.cz%2Fmarigold.xml&submit=Submit&http=1.1&gzip=yes&type=GET&ua=Opera%2F9.00+%28Windows+NT+5.1%3B+U%3B+cs%29+Web-Sniffer%2F1.0.24
a
http://web-sniffer.net/?url=http%3A%2F%2Fwww.marigold.cz%2Ffeed&submit=Submit&http=1.1&gzip=yes&type=GET&ua=Opera%2F9.00+%28Windows+NT+5.1%3B+U%3B+cs%29+Web-Sniffer%2F1.0.24
naprosto nechápu a jsem ztracen, nechápu proč jedno z toho prohlížeč automaticky odhadne jako utf-8 a zobrazí správně a to druhé odhadne a zobrazí špatně (když se to ručně přepne na utf-8, tak se i ta druhá stránka zobrazí správně). Takže – jak dostat do php skriptu délku výsledného dokumentu, abychom mohli odflitrovat ten content length problém?
/—code php
‚; ?>
\—
Trying 217.11.242.16…
Connected to marigold.cz.
Escape character is ‚^]‘.
GET /feed/ HTTP/1.1
Host: http://www.marigold.cz
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2006 17:29:26 GMT
Server: Apache
X-Pingback: http://www.marigold.cz/xmlrpc.php
Last-Modified: Thu, 09 Nov 2006 12:51:17 GMT
ETag: „06144929e5dad2a42005342aab0cacf1“
Status: 200 OK
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml; charset=UTF-8
79b2
18:31:16$~/Desktop/cz-local-search/img>telnet http://www.marigold.cz 80
Trying 217.11.242.16…
Connected to marigold.cz.
Escape character is ‚^]‘.
GET /feed/ HTTP/1.1
Host: http://www.marigold.cz
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2006 17:29:26 GMT
Server: Apache
X-Pingback: http://www.marigold.cz/xmlrpc.php
Last-Modified: Thu, 09 Nov 2006 12:51:17 GMT
ETag: „06144929e5dad2a42005342aab0cacf1″
Status: 200 OK
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml; charset=UTF-8
79b2
<?xml version=“1.0″ encoding=“UTF-8″?>
<!– generator=“wordpress/2.0.5″ –>
<rss version=“2.0“
To „79b2“ mi připadá podezřelý, myslím, že to tam nemá co dělat. Podíval bych se, jestli tam neposíláš identifikační byty UTF-8.
Ale možná je to i něco jinýho 🙂
Aby se nakonec neukázalo, že géniové v Seznamu neumí http/1.1 (umět chunked je povinné 🙂
Nicmene jako dlouhodobe reseni bych to nedoporucoval, navic bych to jako pricinu skoro vyloucil. Na Content-Length se neda spolehat nikdy a Seznam by mel mnohem vetsi problemy kdyby bez nej neumel pracovat.
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0b8f96a0-53ab-4ef4-ab2e-7bfc5b6f426d.mspx?mfr=true
No, jen napady 🙂
http://www.edginet.org/techie/website/http.html
Kapitola Content-Length header
Staci dat na zacatek generovani XML ob_start(), na konec ob_end_flush() a pred to pridani HTTP hlavicky:
header(‚Content-Length: ‚ . ob_get_length());
Vyreseni problemu bych si od toho nesliboval, ale Content-Length to prida.
No a Seznam vcelku pochopitelně kontroluje nejdřív hlavičky a na těch se zarazí.
Každý kdo se montuje do web aplikací by měl mít protokol http nastudovaný!