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

Вниз

Нужен код интернет-страницы задавая ссылку этой страницы   Найти похожие ветки 

 
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]


if not (HttpAddRequestHeaders(FRequest, PChar(Ansi), Length(Header),
                                    HTTP_ADDREQ_FLAG_REPLACE or
                                    HTTP_ADDREQ_FLAG_ADD)) then Exit;

Во первых тут ошибочка.Нужно заменить Header на Ansi(исправлял глюки и пропустил).
Во вторых,тяжело читать мыси.Еслиб я знал где происходит дело,возможно я смог бы помочь.Наверное тебе нужно поэксперементировать с флагами.


 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.04 c
14-1107779407
Sandman25
2005-02-07 15:30
2005.02.27
Исключенное третье


1-1108294875
Olka
2005-02-13 14:41
2005.02.27
Можно ли добавить новое значение в DBLookupCombobox


4-1105420792
leonidus
2005-01-11 08:19
2005.02.27
Как определить язык Windows


14-1107434849
Holy
2005-02-03 15:47
2005.02.27
Компрессия (изменение громкости) звука


1-1107956795
YuriS
2005-02-09 16:46
2005.02.27
DateTimePicker