Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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]


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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.037 c
8-1100373842
RedLord
2004-11-13 22:24
2005.02.27
почему так работает TIMAGE


4-1105463184
aglar
2005-01-11 20:06
2005.02.27
Копирование директории


14-1107800169
QuasiLamo
2005-02-07 21:16
2005.02.27
Ну и требования у электронных книг пошли....


1-1108054427
Sphinxx
2005-02-10 19:53
2005.02.27
Перевод из двоичной в десятичную


1-1107966737
juice
2005-02-09 19:32
2005.02.27
Глобальная переменная





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский