Форум: "Сети";
Текущий архив: 2018.02.04;
Скачать: [xml.tar.bz2];
ВнизКак скачать 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c