![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужен код интернет-страницы задавая ссылку этой страницы
Muhan © (2004-12-14 02:00:00)Помогите написать функцию чтобы, по данной ссылке прога выдавала код данной страницы.
Я нашел функцию(ниже) на страницах инета, так вот проблема в том, что когда скачивается файл с кодом страницы, вместо кода выдает
"ссылка устарела", хотя на самом деле это не правда...
Мне сказали что этот фрагмент скачивает страничку как файл просто, и не правильно качает потому что скрипт переадресует на другую страрницу. Посоветовали получить код через прямое общение с сервером...не знаю как, помогите плиз :) очень надо стараюсь на благо многих людей :)
Спасибо заранее..
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-21 10:23:00) [1]
> 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 анализируй эту переменную.
Cam73 (2004-12-20 04:59:00) [2]а у меня другая проблема:
я качаю хтмл с помощью
nmhttp1.body:='1.html';
nmhttp1.InputFileMode:=true;
nmhttp1.get('www.server.ru/example.html');
Всё бы работало, НО... example.html - большого размера файл.
А мне его содержимое надо получить уже в процессе его скачивания.
Как быть? Пишите плиз на мыло. Спасибо :)
Muhan (2004-12-18 18:21:00) [3]я прошу помощи с Хттп клиентом...и мне не нужен Вининет...
Seeker (2004-12-18 11:29:00) [4]Я тебе говорил, возьми дюбой HTTP-клиент( не понимаю зачем тут вообще WinInet нужен) там все работает нормально.
Muhan (2004-12-17 20:52:00) [5]ну так и что делать?
DiamondShark (2004-12-16 14:57:00) [6]Ну правильно. Устарела ссылка.
Сервер возвращает ответ-редирект и краткий описательный контент.
В http-заголовке Location сервер указывает новый адрес.
Muhan (2004-12-16 04:08:00) [7]не работает..ссылка устарела :(
seeker (2004-12-15 10:01:00) [8]
Во первых тут ошибочка.Нужно заменить Header на Ansi(исправлял глюки и пропустил).
if not (HttpAddRequestHeaders(FRequest, PChar(Ansi), Length(Header),
HTTP_ADDREQ_FLAG_REPLACE or
HTTP_ADDREQ_FLAG_ADD)) then Exit;
Во вторых,тяжело читать мыси.Еслиб я знал где происходит дело,возможно я смог бы помочь.Наверное тебе нужно поэксперементировать с флагами.
Muhan (2004-12-15 09:51:00) [9]Как обойти этот скрипт? Помогите!
Muhan (2004-12-15 09:47:00) [10]Нет, вру :(
Опять таже фигня :( что же ты будешь делать :(
ссылка устарела!!!
переадресует на другую страницу :( где заведомо написано ссылка устарела!
Muhan (2004-12-15 09:42:00) [11]Спасибо большое все работает:))
Muhan (2004-12-15 09:25:00) [12]Да я имею ввиду хтмл код!!
какие библиотеки надо использовать??
в данном примере?
seeker (2004-12-14 09:30:00) [13]Не пойму что значит код страницы,наверно 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;