Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как при помощи IdHTTP зайти в нужный фрейм?


Автор: ksili 8.12.2007, 12:51
Я при помощи TIdHTTP захожу на многофреймовую HTML-страницу:
Код

TStringStream *Info= new TStringStream("");

IdHTTP1->Get("http://some_url.ru", Info);


В Info после этого содержится вот такое:
Код

<HTML>
<HEAD>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Content-language" content="ru-SU">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="refresh" content="0; url=http://some_url.ru/cgi-bin/BilUtil.dll/BilMenu">
</HEAD>
<BODY>
</BODY>
</HTML>


А если на неё обычно зайти и сохранить как HTML. То сохраняется такое:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd">
<html><head><meta http-equiv="pragma" content="no-cache"><meta http-equiv="Cache-Control" content="no-cache"><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><meta http-equiv="Content-language" content="ru-SU"><title>1654437 [SIPID+1 owned]</title>
<frameset COLS="190,*">
<frame SRC="MTK?oper=1&uid=18840550" NAME="lframe"    marginheight="0" marginwidth="0" scrolling="no" noresize="noresize" frameborder="0">
<frameset ROWS="13,*">
<frame SRC="MTK?oper=5" NAME="upmainframe" marginheight="0" marginwidth="0" scrolling="no" noresize="noresize" frameborder="0">
<frame SRC="MTK?oper=5" NAME="mainframe" marginheight="0" marginwidth="0" scrolling="auto" frameborder="0">
</frameset>
</frameset>
</html>


Я так понимаю в Info TIdHTTP получает содержимое одного из фреймов. Как мне выбрать конкретный фрейм?

Добавлено @ 12:58
У меня несколько хелпов по Indy и ни в одном из них даже слова frame (фрейм) нету :(

Автор: VSergeyV 11.12.2007, 11:24
Мое мнение такое - фреймы это по сути несколько веб-страниц (со своими URL) отображаемых на одной странице, если нужен конретный фрейм - то нужно использовать соответсвующию ссылку

Автор: ksili 11.12.2007, 11:57
Ну допустим так. Но как-то сложновато определить нужную ссылку на фрейм.
Там основная страница имеет URL такого содржания:
Код

https://customer.voipexchange.ru/cgi-bin/Exchange.dll/MTK

А все остальные ссылки - то же самое плюс через вопросик указание некоторых параметров.
У меня что-то IdHTTP не хавает ни такое
Код

IdHTTP1->Get("https://customer.voipexchange.ru/cgi-bin/Exchange.dll/MTK?oper=4&uid=18840550", Info);

ни с указанием порта:
Код

IdHTTP1->Get("https://customer.voipexchange.ru:443/cgi-bin/Exchange.dll/MTK?oper=4&uid=18840550", Info);

Точнее, выполняется, но в Info возвращается всегда одно и то же: "\x1F‹\b" или "‹" (что то же самое)

Особо подозрительно смотрится dll внутри пути

Автор: ksili 11.12.2007, 13:24
Заметил, что в хидерах после чтения по вышеуказанным ссылкам возвращается следующее:
Код

Date: Tue, 11 Dec 2007 10:21:04 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Pragma: no-cache
Content-Encoding: gzip
Content-Type: text/html; charset=windows-1251
Content-Length: 283

Так может страница читается, но её содержимое сжато gzip'ом, а те закорючки - стандартное начало gzip'овского архива? Кто-нибудь сталкивался с подобным?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)