Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.02.04;
Скачать: CL | DM;

Вниз

Как скачать XML, а не обработанный уже HTML?   Найти похожие ветки 

 
Cobalt ©   (2010-09-19 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 ©   (2010-09-19 17:48) [1]


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

кто сказал? али ты TIdHTTP браузером считаешь? можешь с таким же успехом слезно вопрошать "как вернуть код PHP, а то негодяйский браузер его в полноценный html превращает"....


 
Дмитрий Тимохов   (2010-09-19 18:19) [2]

Володь, почему ты думаешь, что браузер превращает его в HTML?
Я думаю, что это на серверной стороне делается.
Тады никак не вытащить.


 
Cobalt ©   (2010-09-19 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 ©   (2010-09-19 18:50) [4]

Так же, если ссылку "Сохранить объект как" - вы увидите именно XML
Я же упорно получаю HTML :-(
Может, надо как-то по другому скачивать?


 
Cobalt ©   (2010-09-19 19:35) [5]

Попытка cказать серверу, что мне нужен именно xml
IdHTTPconnect.Request.Accept := "text/xml";
не удалась :-(


 
Медвежонок Пятачок ©   (2010-09-20 00:44) [6]

никакого xml для браузера там нет.
трансформация делается на серверной стороне.
если бы там был xml со ссылкой на xls то идшттп стянул бы его аз-из.


 
Cobalt ©   (2010-09-20 00:51) [7]

тогда почему браузер показывает как исходный код именно XML?
И потом, трансформацию делает именно браузер.
XML + XSL с жесткого диска превращает в HTML не жесткий диск, а браузер.


 
Медвежонок Пятачок ©   (2010-09-20 00:53) [8]

Если ты откроешь ссылку, и посмотришь исходный код, то увидишь XML (в Мозилле по крайней мере)

Если открыть ссылку в мозилле, то прежде чем ты увидишь xml, ты там еще увидишь полтора килограмма скриптов, которые  и тянут твой хмл с сервера.
Но совершенно по другой ссылке разумеется.


 
sniknik ©   (2010-09-20 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 ©   (2010-09-20 01:42) [10]

кстати, как понял это не совсем "веб страничка", скорее "веб приложение", поэтому так и сделано, скачиваются данные, а страничка строится на клиенте в зависимости от параметров разная. и поэтому же постоянно идут ответы от сервера 304 вместо 200 (типа эти данные не менялись), т.е. раз скачал все, а после только заголовками обмен, а данные при видимости разных страниц/динамических/с взаимодействием с пользователем не перезакачиваются, берутся из кеша.
"симпатичное" решение надо сказать, при первом впечатлении как о "громоздком".


 
Медвежонок Пятачок ©   (2010-09-20 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 ©   (2010-09-20 11:05) [12]

А что за компонент TXMLHTTP?
Я использую TIdHTTP (Rev 1.65)


 
Медвежонок Пятачок ©   (2010-09-20 11:47) [13]

какая разница. ни тот ни другой ничего кроме вынимания контента не делает.


 
Cobalt ©   (2010-09-20 12:38) [14]

А TIdHTTP ты пробовал?


 
sniknik ©   (2010-09-20 12:48) [15]

> А TIdHTTP ты пробовал?
я пробовал. читай [9], все что там есть получено из него "пошагово".


 
Медвежонок Пятачок ©   (2010-09-20 13:02) [16]

А TIdHTTP ты пробовал?

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

PS idHTTP такой же "тупой", как и любой другой транспорт. Никаких трансформаций xml он сам по себе не делает, даже если в документе указана ссылка на xsl


 
Cobalt ©   (2010-09-20 16:23) [17]

> Медвежонок Пятачок ©   (20.09.10 10:07) [11]

Можно таки узнать, что это за компонет такой, TXMLHTTP?


 
sniknik ©   (2010-09-20 17:51) [18]

> что это за компонет такой, TXMLHTTP?
это "обертка" ActivX обьекта используемого IE для обратной связи с клиента (Ajax). если бы писал на яваскрипт знал бы.


 
Медвежонок Пятачок ©   (2010-09-20 17:51) [19]

uses MSXML2_TLB;

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


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

Но можно и так как у меня выше написано.



Страницы: 1 вся ветка

Текущий архив: 2018.02.04;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.008 c
6-1284889393
Cobalt
2010-09-19 13:43
2018.02.04
Как скачать XML, а не обработанный уже HTML?


2-1455547592
Незарегистрированный
2016-02-15 17:46
2018.02.04
Как корректно сравнить/присвоить Longint с Сишными TRUE и FALSE?


2-1455133154
aturasama
2016-02-10 22:39
2018.02.04
сокеты


2-1455227853
Dmk
2016-02-12 00:57
2018.02.04
Округление


15-1469302746
Юрий Зотов
2016-07-23 22:39
2018.02.04
Как много нам открытий чудных...