Форум: "Сети";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
ВнизНужен код интернет-страницы задавая ссылку этой страницы Найти похожие ветки
← →
Muhan © (2004-12-14 02:00) [0]Помогите написать функцию чтобы, по данной ссылке прога выдавала код данной страницы.
Я нашел функцию(ниже) на страницах инета, так вот проблема в том, что когда скачивается файл с кодом страницы, вместо кода выдает
"ссылка устарела", хотя на самом деле это не правда...
Мне сказали что этот фрагмент скачивает страничку как файл просто, и не правильно качает потому что скрипт переадресует на другую страрницу. Посоветовали получить код через прямое общение с сервером...не знаю как, помогите плиз :) очень надо стараюсь на благо многих людей :)
Спасибо заранее..
uses Wininet;
function GetInetFile(const fileURL, FileName: String): boolean;
const BufferSize = 1024;
var hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f: File;
sAppName: string;
begin
Result:=False;
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,
nil, nil, 0);
try
hURL := InternetOpenURL(hSession,
PChar(fileURL),nil,0,0,0);
try
AssignFile(f, FileName);
Rewrite(f,1);
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen)
until BufferLen = 0;
CloseFile(f);
Result:=True;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
← →
seeker © (2004-12-14 09:30) [1]Не пойму что значит код страницы,наверно HTML код,попробуй следующий код:
function DelHttp(URL: String): String;
var
Index:integer;
begin
Index:=Pos("://", URL);
if Index > 0 then Delete(Url, 1, Index+2);
Result := Copy(Url, 1, Pos("/", Url) - 1);
if Result = "" then Result := URL;
end;
function GetUrl(const URL: String): String;
var
FSession, FConnect, FRequest: HINTERNET;
FHost, FScript: String;
Ansi: PAnsiChar;
Buff: array [0..1023] of Char;
BytesRead: Cardinal;
begin
Result := "";
FHost := DelHttp(Url);
FScript := Url;
Delete(FScript, 1, Pos(FHost, FScript) + Length(FHost));
FSession := InternetOpen("DMFR", INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if not Assigned(FSession) then Exit;
try
FConnect := InternetConnect(FSession, PChar(FHost), HTTP_PORT, nil,
"HTTP/1.0", INTERNET_SERVICE_HTTP, 0, 0);
if not Assigned(FConnect) then Exit;
try
FillChar(Ansi, SizeOf(""), 0);
FRequest := HttpOpenRequest(FConnect, "GET", PChar(FScript), "HTTP/1.0",
"", @Ansi, INTERNET_FLAG_RELOAD, 0);
if not Assigned(FConnect) then Exit;
try
Ansi := "Accept: text/*"+#13#10+Header;
if not (HttpAddRequestHeaders(FRequest, PChar(Ansi), Length(Header),
HTTP_ADDREQ_FLAG_REPLACE or
HTTP_ADDREQ_FLAG_ADD)) then Exit;
if not (HttpSendRequest(FRequest, nil, 0, nil, 0)) then Exit;
FillChar(Buff, SizeOf(Buff), 0);
repeat
Result := Result + Buff;
FillChar(Buff, SizeOf(Buff), 0);
InternetReadFile(FRequest, @Buff, SizeOf(Buff), BytesRead);
until BytesRead = 0;
finally
InternetCloseHandle(FRequest);
end;
finally
InternetCloseHandle(FConnect);
end;
finally
InternetCloseHandle(FSession);
end;
end;
← →
Muhan © (2004-12-15 09:25) [2]Да я имею ввиду хтмл код!!
какие библиотеки надо использовать??
в данном примере?
← →
Muhan © (2004-12-15 09:42) [3]Спасибо большое все работает:))
← →
Muhan © (2004-12-15 09:47) [4]Нет, вру :(
Опять таже фигня :( что же ты будешь делать :(
ссылка устарела!!!
переадресует на другую страницу :( где заведомо написано ссылка устарела!
← →
Muhan © (2004-12-15 09:51) [5]Как обойти этот скрипт? Помогите!
← →
seeker © (2004-12-15 10:01) [6]
Во первых тут ошибочка.Нужно заменить Header на Ansi(исправлял глюки и пропустил).
if not (HttpAddRequestHeaders(FRequest, PChar(Ansi), Length(Header),
HTTP_ADDREQ_FLAG_REPLACE or
HTTP_ADDREQ_FLAG_ADD)) then Exit;
Во вторых,тяжело читать мыси.Еслиб я знал где происходит дело,возможно я смог бы помочь.Наверное тебе нужно поэксперементировать с флагами.
← →
Muhan © (2004-12-16 04:08) [7]не работает..ссылка устарела :(
← →
DiamondShark © (2004-12-16 14:57) [8]Ну правильно. Устарела ссылка.
Сервер возвращает ответ-редирект и краткий описательный контент.
В http-заголовке Location сервер указывает новый адрес.
← →
Muhan © (2004-12-17 20:52) [9]ну так и что делать?
← →
Seeker © (2004-12-18 11:29) [10]Я тебе говорил, возьми дюбой HTTP-клиент( не понимаю зачем тут вообще WinInet нужен) там все работает нормально.
← →
Muhan © (2004-12-18 18:21) [11]я прошу помощи с Хттп клиентом...и мне не нужен Вининет...
← →
Cam73 © (2004-12-20 04:59) [12]а у меня другая проблема:
я качаю хтмл с помощью
nmhttp1.body:="1.html";
nmhttp1.InputFileMode:=true;
nmhttp1.get("www.server.ru/example.html");
Всё бы работало, НО... example.html - большого размера файл.
А мне его содержимое надо получить уже в процессе его скачивания.
Как быть? Пишите плиз на мыло. Спасибо :)
← →
Seeker © (2004-12-21 10:23) [13]
> Muhan ©
Я тут открыл(несколько раз) ссылку которую ты мне присылал с помощью привеленного мной кода(см выше),так все открывается нормально,ни каких тебе проблем с устаревшей ссылкой.
на всякий случай, попробуй взять HTTP-клиента отсюда:
http://www.badfan.com/delphi/TIE_http_https_build_044.zip
Описание можно почитать сдесь:
http://www.badfan.com/delphi/tie_http_https.html
C помощью него я тоже открывал без проблем.
> Cam73 ©
Вчем проблемма, в приведенном коде замени
function GetUrl(const URL: String): String;
на procedure GetUrl(const URL: String);
обьяви глобальную переменную типа string или TStringList и подставь ее вместо result в процедуре GetUrl, кинь на форму таймер и в обработчике OnTimer анализируй эту переменную.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.034 c