Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2017, 15:31   #21
pas2
Пользователь
 
Регистрация: 02.01.2016
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Иной где? Вы куда именно смотрели?
когда получаю исходный код страницы через chromium, совсем иной код страницы получается
pas2 вне форума Ответить с цитированием
Старый 01.04.2017, 15:35   #22
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Цитата:
когда получаю исходный код страницы через chromium, совсем иной код страницы получается
И иной это какой с нормальной ссылкой на видео.
Если в chromium у вас нормально, то тогда работайте с этим компонентом TChromium.
Кстати вы в простом браузере IE пробовали подключаться?

Последний раз редактировалось Aliens_wolfs; 01.04.2017 в 15:40.
Aliens_wolfs вне форума Ответить с цитированием
Старый 01.04.2017, 15:44   #23
pas2
Пользователь
 
Регистрация: 02.01.2016
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
И иной это какой с нормальной ссылкой на видео.
там вообще нет ссылки подобной, когда сохраняю в *.html полученый код, и через браузер смотрю исходный код то эта ссылка есть, но когда перехожу по ней там пусто... Думаю где в скриптах эта ссылка спрятана, вот задачка как ее отловить...
pas2 вне форума Ответить с цитированием
Старый 01.04.2017, 16:17   #24
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Откуда вы его берете?

В браузере вы смотрите то, что прислал сервер (Ctrl+U), или то, что в данный момент в DOM (F12)?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.04.2017, 16:21   #25
pas2
Пользователь
 
Регистрация: 02.01.2016
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Откуда вы его берете?
Ctrl+U
pas2 вне форума Ответить с цитированием
Старый 01.04.2017, 16:26   #26
pas2
Пользователь
 
Регистрация: 02.01.2016
Сообщений: 42
По умолчанию

через запрос F12 нахожу прямую ссылку, проблема в том что она меняется каждый день
pas2 вне форума Ответить с цитированием
Старый 02.04.2017, 14:46   #27
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

В общем получилось получить некую страницу по вашей ссылке http://ok-tv.org/channels/1-ntv.html через прокси вот таким способом тот же код через TWebrowser только с добавление TimeOut вывода результата иначе она долго не выводит результат поэтому у вас зависал проект. В полученной странице ссылки на скрипты. В браузере IE видимо выполняется какой то скрипт получения видео, страница висит и что то пытаеться выполнить

Код:
procedure WaitForBrowser(WB: TWebbrowser; TimeOutResult: Integer);
var
TimeOut: integer;
begin
TimeOut:= 0;
  while (WB.ReadyState <> READYSTATE_COMPLETE)
    and not (Application.Terminated) and(TimeOut < TimeOutResult) do
  begin
    Application.ProcessMessages;
    inc(TimeOut);
    Sleep(1);
  end;
end;

function WebBrowserExtractDoc(Url: String; TimeOutResult: Integer): String;
var
WebBrowser: TWebBrowser;
DocStream: TStringStream;
begin
WebBrowser:= TWebBrowser.Create(nil);
DocStream:= TStringStream.Create('');
try
   WebBrowser.ParentWindow:= Application.Handle;
   WebBrowser.Hide;
   WebBrowser.Navigate(Url);
   WaitforBrowser(WebBrowser, TimeOutResult);
   (WebBrowser.Document as IPersistStreamInit).Save(TStreamAdapter.Create(DocStream), false);
   DocStream.Position:= 0;
   with TStringList.Create do
   begin
   LoadFromStream(DocStream);
   Result:= Text;
   free;
   end;
finally
WebBrowser.free;
DocStream.free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.Add(UTF8ToAnsi(WebBrowserExtractDoc('http://ok-tv.org/channels/1-ntv.html', 1000)));
end;

Последний раз редактировалось Aliens_wolfs; 02.04.2017 в 14:50.
Aliens_wolfs вне форума Ответить с цитированием
Старый 02.04.2017, 15:00   #28
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Вот получилось получить полную страницу с помощью WinInet.
Код:
uses
......... WinInet;

//Функция для чтения заголовка ответа сервера если нужно для отладки
function GetQueryInfo(hRequest: Pointer): string;
var code: String;
    size,index:Cardinal;
begin
  SetLength(code,8);//достаточная длина для чтения статус-кода
  size:=Length(code);
  index:=0;
  if HttpQueryInfo(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF ,PChar(code),size,index)then
    Result:=Code
  else
    if GetLastError=ERROR_INSUFFICIENT_BUFFER then //увеличиваем буффер
      begin
        SetLength(code,size);
        size:=Length(code);
        if HttpQueryInfo(hRequest,HTTP_QUERY_RAW_HEADERS_CRLF,PChar(code),size,index) then
          Result:=code;
      end
  else
      Result:='';
end;

//Функция получения страницы
function GetSite(URL: String): string;
const
 Accept = 'Accept: */*' + sLineBreak;
 ProxyConnection = 'Proxy-Connection: Keep-Alive' + sLineBreak;
 LNG = 'Accept-Language: ru' + sLineBreak;
 AGENT = 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '+
 'Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144 (Edition Yx)' + sLineBreak;
var
URL_Base,URL_Page: String;
hInet,hCon,hReq: Pointer;
  Status, StatusSize, Index: DWORD;
  bytes, b, posi: Cardinal;
  ResponseString: AnsiString;
  SRequest: String;
begin

  if pos('https://',URL)>0 then
  delete(URL,1,length('https://'))
  else
   if pos('http://',URL)>0 then
   delete(URL,1,length('http://'));

  URL_Base:=PChar(copy(URL,1,pos('/',URL)-1));
  URL_Page:=PChar(copy(URL,pos('/',URL)+1,length(URL)-pos('/',URL)));

 hInet:= InternetOpen('My Agent',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
 if not Assigned(hInet) then
begin
Showmessage('Error: InternetOpen');
exit;
end;

 hCon:= InternetConnect(hInet, PChar(URL_Base), 80, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
  if not Assigned(hCon) then
  begin
  Showmessage('Error: InternetConnect');
  exit;
   end;

  hReq:= HttpOpenRequest(hCon, 'GET', PAnsichar(URL_Page),'HTTP/1.0', nil,nil,INTERNET_FLAG_KEEP_CONNECTION, 0);
  if not Assigned(hReq) then
  begin
  Showmessage('Error: HttpOpenRequest');
  exit;
  end;

         // добавляем необходимые заголовки к запросу
      HttpAddRequestHeaders(hReq, Accept,
        Length(Accept), HTTP_ADDREQ_FLAG_ADD);
      HttpAddRequestHeaders(hReq, ProxyConnection,
        Length(ProxyConnection), HTTP_ADDREQ_FLAG_ADD);
      HttpAddRequestHeaders(hReq, LNG,
        Length(LNG), HTTP_ADDREQ_FLAG_ADD);
      HttpAddRequestHeaders(hReq, AGENT,
        Length(AGENT), HTTP_ADDREQ_FLAG_ADD);

        // Проверяем запрос:
      StatusSize := 0;
      Index := 0;
      SRequest := '';
      HttpQueryInfo(hReq, HTTP_QUERY_RAW_HEADERS_CRLF or
        HTTP_QUERY_FLAG_REQUEST_HEADERS, @SRequest[1], StatusSize, Index);
      if StatusSize > 0 then
      begin
         SetLength(SRequest, StatusSize);
        HttpQueryInfo(hReq, HTTP_QUERY_RAW_HEADERS_CRLF or
          HTTP_QUERY_FLAG_REQUEST_HEADERS, @SRequest[1], StatusSize, Index);
      end;

  // Отправляем запрос
  if not (HttpSendRequest(hReq,'',0,nil,0)) then
  begin
  Showmessage('Error: HttpSendRequest');
  exit;
  end;
  //Смотрим ответ сервера через функцию выше для отладки если нужно
      showmessage(GetQueryInfo(hReq));

          StatusSize := SizeOf(Status);
          Index := 0;
          HttpQueryInfo(hReq, HTTP_QUERY_FLAG_NUMBER or HTTP_QUERY_STATUS_CODE , @Status, StatusSize, Index);

         posi := 1;
          b := 1;
          ResponseString := '';
          while b > 0 do
          if InternetQueryDataAvailable( hReq, bytes, 0, 0 ) then
          begin
            SetLength(ResponseString, Length(ResponseString) + bytes );
            InternetReadFile(hReq, @ResponseString[Posi], bytes, b );
            Inc(Posi, b);
          end;

   InternetCloseHandle(hReq);
   InternetCloseHandle(hCon);
   InternetCloseHandle(hInet);
  Result:=ResponseString;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Lines.Add(UTF8ToAnsi(GetSite('http://ok-tv.org/channels/1-ntv.html')));
end;
И еще один вариант который через прокси у меня пока не получилось проверить, попробуйте у себя
Код:
uses
......... ssl_openssl, HTTPSend;

procedure TForm1.Button1Click(Sender: TObject);
var
pList : TStringList;
httpsend: THTTPSend;
begin
 pList:= TStringList.Create;
 httpsend:=THTTPSend.Create;
 try
  httpsend.Protocol := '1.1';
  httpsend.UserAgent:= 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '+
 'Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144 (Edition Yx)';
  httpsend.Headers.Add('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
  httpsend.Headers.Add('Accept-Language: en-US,en;q=0.5');
  httpsend.Headers.Add('Connection: keep-alive');
    httpsend.Sock.CreateWithSSL(TSSLOpenSSL);
    httpsend.Sock.SSLDoConnect;
    httpsend.HTTPMethod('get','http://ok-tv.org/channels/1-ntv.html');
    pList.LoadFromStream(httpsend.Document);
    // для получения страницы
     Memo1.Lines.Add(UTF8ToAnsi(pList.Text)); 
 finally
 pList.free;
 httpsend.free;
end;
end;

Последний раз редактировалось Aliens_wolfs; 03.04.2017 в 08:03.
Aliens_wolfs вне форума Ответить с цитированием
Старый 08.04.2017, 11:59   #29
pas2
Пользователь
 
Регистрация: 02.01.2016
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Вот получилось получить полную страницу с помощью WinInet.
Респект и уважуха!!!! Все работает, но столкнулся со следующей не неразберихой, ссылка на код видео находится по этой ссылке, http://ahmed9zg.beget.tech/ok-tv/ntv.php, эта ссылка в мемо есть, пытаюсь парсить через get всеравно пусто, через Ctrl+U если перейти по http://ahmed9zg.beget.tech/ok-tv/ntv.php отображается ссылка на видео
pas2 вне форума Ответить с цитированием
Старый 08.04.2017, 12:04   #30
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Цитата:
эта ссылка в мемо есть, пытаюсь парсить через get все равно пуст
Можете показать кусочек текста с ссылкой полученного в мемо, чтобы потеснить.
Или архив с полученной страницей сохраните здесь

Последний раз редактировалось Aliens_wolfs; 08.04.2017 в 12:18.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить ссылку на ячейки blacklight Microsoft Office Excel 5 23.09.2009 14:32
Получить ссылку на видео файл SunKnight Свободное общение 6 11.06.2009 02:46
как получить ProgressChange отдельного фрейма? alex1245 Работа с сетью в Delphi 0 22.03.2009 03:20
Help!!! Как в Delphi сделать ссылку на видео? Vredinka Помощь студентам 1 05.03.2008 13:34