Конференция "Сети" » Как скачать XML, а не обработанный уже HTML? [WinXP]
 
  • Cobalt © (19.09.10 13:43) [0]
    Использую TIdHTTP для скачивания xml-файла.
    Но XML хитрый, с XSL, превращающий его в браузерах в полноценную HTML-страничку.
    TIdHTTP возвращает мне именно HTML, а я хочу получить все-таки исходный XML.
    Как быть? Что использовать? Как настроить TIdHTTP?
    Адрес странички: http://eu.wowarmory.com/guild-info.xml?r=%D0%AF%D1%81%D0%B5%D0%BD%D0%B5%D0%B2%D1%8B%D0%B9+%D0%BB%D0%B5%D1%81&gn=%D0%AE%D0%BD%D0%B8%D1%82%D0%B8
  • Palladin © (19.09.10 17:48) [1]

    > превращающий его в браузерах

    кто сказал? али ты TIdHTTP браузером считаешь? можешь с таким же успехом слезно вопрошать "как вернуть код PHP, а то негодяйский браузер его в полноценный html превращает"....
  • Дмитрий Тимохов (19.09.10 18:19) [2]
    Володь, почему ты думаешь, что браузер превращает его в HTML?
    Я думаю, что это на серверной стороне делается.
    Тады никак не вытащить.
  • Cobalt © (19.09.10 18:31) [3]
    Если ты откроешь ссылку, и посмотришь исходный код, то увидишь XML (в Мозилле по крайней мере)
    Вот то, что должно быть по тому адресу:
    <?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/_layout/guild/roster.xsl"?><page globalSearch="1" lang="ru_ru" requestUrl="/guild-info.xml">
     <tabInfo subTab="guildRoster" tab="guild" tabGroup="guild" tabUrl="r=%D0%AF%D1%81%D0%B5%D0%BD%D0%B5%D0%B2%D1%8B%D0%B9+%D0%BB%D0%B5%D1%81&gn=%D0%AE%D0%BD%D0%B8%D1%82%D0%B8"/>
     <guildInfo>



    А вот что получаю я, из кода
    IdHTTPconnect.Get(Address, AStream);
    Memo1.Lines.Add(AStream.DataString);


    '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">'#$A'<html>'#$A'<head>'#$A'<link href=\"/favicon.ico\" rel=\"shortcut icon\">'#$A'<link href=\"/_content/en_us/searchplugin.xml\" rel=\"search\" title=\"The World of Warcraft Armory\" type=\"application/opensearchdescription+xml\">'#$A'<title>The World of Warcraft Armory - Юнити @ Ясеневый лес - Guild Roster</title>'#$A'<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">

  • Cobalt © (19.09.10 18:50) [4]
    Так же, если ссылку "Сохранить объект как" - вы увидите именно XML
    Я же упорно получаю HTML :-(
    Может, надо как-то по другому скачивать?
  • Cobalt © (19.09.10 19:35) [5]
    Попытка cказать серверу, что мне нужен именно xml
    IdHTTPconnect.Request.Accept := 'text/xml';


    не удалась :-(
  • Медвежонок Пятачок © (20.09.10 00:44) [6]
    никакого xml для браузера там нет.
    трансформация делается на серверной стороне.
    если бы там был xml со ссылкой на xls то идшттп стянул бы его аз-из.
  • Cobalt © (20.09.10 00:51) [7]
    тогда почему браузер показывает как исходный код именно XML?
    И потом, трансформацию делает именно браузер.
    XML + XSL с жесткого диска превращает в HTML не жесткий диск, а браузер.
  • Медвежонок Пятачок © (20.09.10 00:53) [8]
    Если ты откроешь ссылку, и посмотришь исходный код, то увидишь XML (в Мозилле по крайней мере)

    Если открыть ссылку в мозилле, то прежде чем ты увидишь xml, ты там еще увидишь полтора килограмма скриптов, которые  и тянут твой хмл с сервера.
    Но совершенно по другой ссылке разумеется.
  • sniknik © (20.09.10 01:32) [9]
    > трансформация делается на серверной стороне.
    нет, получается именно xml, тот самый, что в мазиле в исходном коде. с заголовком и ссылкой на "трансформатор" -
    <?xml-stylesheet type="text/xsl" href="/_layout/guild/roster.xsl"?>
    в котором ссылки на следующие
    <xsl:import href="/_layout/includes.xsl"/>
    <xsl:import href="/_layout/guild/header.xsl"/>
    <xsl:output method="html" ...
    и т.д. целая куча файлов и скриптов.

    и это можно проверить, закачав через TIdHTTP, который само собой не дает трансформированный html, а исходный xml, сначала... чтобы продолжить придется вставлять ссылки.
    (почему у автора сразу html хз.)  

    > то прежде чем ты увидишь xml
    первым, а не прежде чем, качается именно xml.
  • sniknik © (20.09.10 01:42) [10]
    кстати, как понял это не совсем "веб страничка", скорее "веб приложение", поэтому так и сделано, скачиваются данные, а страничка строится на клиенте в зависимости от параметров разная. и поэтому же постоянно идут ответы от сервера 304 вместо 200 (типа эти данные не менялись), т.е. раз скачал все, а после только заголовками обмен, а данные при видимости разных страниц/динамических/с взаимодействием с пользователем не перезакачиваются, берутся из кеша.
    "симпатичное" решение надо сказать, при первом впечатлении как о "громоздком".
  • Медвежонок Пятачок © (20.09.10 10:07) [11]
    Ну тогда автор нам немножко врет

    url := 'http://eu.wowarmory.com/guild-info.xml?r=%D0%AF%D1%81%D0%B5%D0%BD%D0%B5%D0%B2%D1%8B%D0%B9+%D0%BB%D0%B5%D1%81&gn=%D0%AE%D0%BD%D0%B8%D1%82%D0%B8';
    with TXMLHTTP.Create(Self) do
     begin
      Open('GET',url);
      Send('');
      while readyState <> 4 do application.ProcessMessages;
      Buff := responseText;
      with TFileStream.Create('response.txt',fmCreate) do
       try
        WriteBuffer(buff[1],Length(buff));
       finally
        Free;
       end;
     end;

    В чистом виде xml без всяких хтмл станиц
  • Cobalt © (20.09.10 11:05) [12]
    А что за компонент TXMLHTTP?
    Я использую TIdHTTP (Rev 1.65)
  • Медвежонок Пятачок © (20.09.10 11:47) [13]
    какая разница. ни тот ни другой ничего кроме вынимания контента не делает.
  • Cobalt © (20.09.10 12:38) [14]
    А TIdHTTP ты пробовал?
  • sniknik © (20.09.10 12:48) [15]
    > А TIdHTTP ты пробовал?
    я пробовал. читай [9], все что там есть получено из него "пошагово".
  • Медвежонок Пятачок © (20.09.10 13:02) [16]
    А TIdHTTP ты пробовал?

    Я его не пробовал только потому что лень настраивать работу через прокси.

    PS idHTTP такой же "тупой", как и любой другой транспорт. Никаких трансформаций xml он сам по себе не делает, даже если в документе указана ссылка на xsl
  • Cobalt © (20.09.10 16:23) [17]
    > Медвежонок Пятачок ©   (20.09.10 10:07) [11]

    Можно таки узнать, что это за компонет такой, TXMLHTTP?
  • sniknik © (20.09.10 17:51) [18]
    > что это за компонет такой, TXMLHTTP?
    это "обертка" ActivX обьекта используемого IE для обратной связи с клиента (Ajax). если бы писал на яваскрипт знал бы.
  • Медвежонок Пятачок © (20.09.10 17:51) [19]
    uses MSXML2_TLB;

     CoXMLHTTP = class
       class function Create: IXMLHTTPRequest;
       class function CreateRemote(const MachineName: string): IXMLHTTPRequest;
     end;


    Вообще, чтобы получить IXMLHTTPRequest  правильнее было вызывать CoXMLHTTP.Create();

    Но можно и так как у меня выше написано.
 
Конференция "Сети" » Как скачать XML, а не обработанный уже HTML? [WinXP]
Есть новые Нет новых   [134436   +24][b:0][p:0.001]