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

Вниз

Прибежали в избу дети, Второпях зовут отца...   Найти похожие ветки 

 
ProgRAMmer Dimonych ©   (2007-03-18 14:21) [0]

Тятя, тятя, наши сети
Притащили мертвеца... :(

А как вообще правильно подключиться к своему сайту и выхватить результат выполнения скрипта в своей программе? Пробовал через Inet API, но InternetOpenURL возвращает nil.

Заранее спс.


 
antonn ©   (2007-03-18 14:49) [1]

по реке плывет кирпич
волосатый как стекло.
ну и пусть себе плывет,
на не нужен пенопласт.

что бы проверить наличие файла на диске, воспользуйся функцией fileexists()


 
Юрий ©   (2007-03-18 14:53) [2]

Плохо пробовал.

procedure TMainForm.LoadData;
var
 hHttpSession, hReqUrl: HINTERNET;
 buffer: array [1..1023] of char;
 nRead: cardinal;
 strRead: string;
begin
 if (edUrl.Text = "") then exit;

 strRead := "";
 hHttpSession := InternetOpen("IE", INTERNET_OPEN_TYPE_PRECONFIG, NIL, NIL, 0);
 try
   hReqUrl := InternetOpenUrl(hHttpSession, PChar(AUrl), NIL, 0, 0, 0);
   try
     repeat
       InternetReadFile(hReqUrl, @buffer, sizeof(buffer), nRead);
       strRead := strRead + string(buffer);
     until nRead = 0;
   finally
     InternetCloseHandle(hReqUrl);
   end;
 finally
   InternetCloseHandle(hHttpSession);
 end;

 Memo.Text := strRead;
end;


 
Юрий ©   (2007-03-18 14:54) [3]

> [2] Юрий ©   (18.03.07 14:53)

Строчку уберёшь.

if (edUrl.Text = "") then exit;


 
ProgRAMmer Dimonych ©   (2007-03-18 14:55) [4]

Хм, заработало. Осталось только одну проблему решить, но она уже связана с HTTP... Спасибо.


 
ProgRAMmer Dimonych ©   (2007-03-18 15:15) [5]

А может и не совсем с HTTP... :(

Проблема в том, что к php-скрипту я добавил вывод информации о броузере. Вот так...

<?
$Browser=$_SERVER["HTTP_USER_AGENT"];
echo("<HTML>\r\n");
echo(" <HEAD>\r\n");
echo("  <TITLE>\r\n");
echo("   Здесь чего-нибудь\r\n");
echo("  </TITLE>\r\n");
echo(" </HEAD>\r\n");
echo(" <BODY>\r\n");
echo("  ".$Browser."\r\n");
echo(" </BODY>\r\n");
echo("</HTML>");
?>

Но при повторной загрузке страницы с этого адреса программа возвращает то, что было...

<HTML>
<HEAD>
 <TITLE>
  Здесь чего-нибудь
 </TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>

Пробовал флаги INTERNET_FLAG_DONT_CACHE, INTERNET_FLAG_PRAGMA_NOCACHE и т.п. - не помогло...


 
clickmaker ©   (2007-03-18 15:20) [6]

<head>
...
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
</head>

оно?


 
ProgRAMmer Dimonych ©   (2007-03-18 17:56) [7]

> clickmaker ©   (18.03.07 15:20) [6]
Не получилось. Видно, ещё что-то есть...

Код PHP-скрипта такой...

<?
$Browser=$_SERVER["HTTP_USER_AGENT"];
echo("<HTML>\r\n");
echo(" <HEAD>\r\n");
echo("  <TITLE>\r\n");
echo("   Текст\r\n");
echo("  </TITLE>\r\n");
echo("  <META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\" />\r\n");
echo("  <META HTTP-EQUIV=\"Cache-Control\" CONTENT=\"no-cache, must-revalidate\" />\r\n");
echo(" </HEAD>\r\n");
echo(" <BODY>\r\n");
echo("  ".$Browser."\r\n");
echo(" </BODY>\r\n");
echo("</HTML>");
?>

В броузере всё нормально отображает.

Код процедуры...

procedure TForm1.Button1Click(Sender: TObject);
var
Internet,Forum:HINTERNET;
Buffer:array [0..1023] of Char;
BytesRead:Cardinal;
Res:ANSIString;
begin
Internet:=InternetOpen("Some Program",0,nil,nil,0);
try
 Forum:=InternetOpenURL(Internet,"http://www.SomeSite.com/SomeScript.php","",0,INTERNET_FLAG_EXISTING_CONNECT or INTERNET_FLAG_RELOAD,0);
 try
  Res:="";
  while True do
  begin
   ZeroMemory(@Buffer,SizeOf(Buffer));
   InternetReadFile(Forum,@Buffer,SizeOf(Buffer),BytesRead);
   if BytesRead=0 then Break;
   Res:=Res+Buffer;
  end;
 finally
  InternetCloseHandle(Forum);
 end;
finally
 InternetCloseHandle(Internet);
end;
Res:=Copy(Res,1,Pos("</HTML>",Res)+6);
Memo.Lines.Add(Res);
end;

Чего здесь может быть не так?


 
clickmaker ©   (2007-03-18 18:10) [8]


> [7] ProgRAMmer Dimonych ©   (18.03.07 17:56)

а точно у тебя этот $browser на серверной стороне заполняется?
если в body просто текст вставить - вернет?


 
ProgRAMmer Dimonych ©   (2007-03-18 21:38) [9]

> clickmaker ©   (18.03.07 18:10) [8]
Скрипт нормально отображается в броузере (GreenBrowser, на движке IE).


 
ProgRAMmer Dimonych ©   (2007-03-18 21:38) [10]

P.S. Не скрипт, а результат его работы.


 
clickmaker ©   (2007-03-19 10:26) [11]


> [10] ProgRAMmer Dimonych ©   (18.03.07 21:38)

ну то есть если написать
echo(" <BODY>\r\n");
echo("  Типа тело\r\n");
echo(" </BODY>\r\n");
то вернет
</HEAD>
<BODY>
Типа тело
</BODY>
</HTML>

?


 
ProgRAMmer Dimonych ©   (2007-03-19 15:11) [12]

> clickmaker ©   (19.03.07 10:26) [11]
> > [10] ProgRAMmer Dimonych ©   (18.03.07 21:38)
> ну то есть если написать
> echo(" <BODY>\r\n");
> echo("  Типа тело\r\n");
> echo(" </BODY>\r\n");
> то вернет
> </HEAD>
> <BODY>
> Типа тело
> </BODY>
> </HTML>
> ?
Ну, да. Только для приведённого в цитате фрагмента (3 echo) никаких HEAD"ов не будет :). А вообще, да: возвращает то, что там указано.


 
ProgRAMmer Dimonych ©   (2007-03-19 15:34) [13]

Самое забавное, что в вышеприведённом коде на Дельфи переменная Forum после попытки соединения равна nil.


 
ProgRAMmer Dimonych ©   (2007-03-19 16:30) [14]

> ProgRAMmer Dimonych ©   (19.03.07 15:34) [13]
Последнее устранил, вроде работает. Но только, кажется, кеширует где-то результат соединения :(

Убрал www после http:// - заработало (хотя хостер предлагает адрес с и без www одновременно). Потом исправил скрипт так, чтобы вывод информации о пользователе ($Browser) происходил не один, а три раза. Программа принимает только 1.

Как можно отрубить этот долбаный кэш? Флаг INTERNET_FLAG_RELOAD при вызове InternetOpenURL используется.


 
clickmaker ©   (2007-03-19 17:30) [15]


> [14] ProgRAMmer Dimonych ©   (19.03.07 16:30)

даже любопытно стало... попробовал у себя.
Вот код

procedure TForm1.Button1Click(Sender: TObject);
var
Internet,Forum:HINTERNET;
Buffer:array [0..1023] of Char;
BytesRead:Cardinal;
Res:ANSIString;
begin
Internet:=InternetOpen("Some Program",INTERNET_OPEN_TYPE_PRECONFIG,
nil,nil,0);
try
Forum:=InternetOpenURL(Internet,"http://relaxander.webest.net/somescript.php","",0,0,0);
try
 Res:="";
 while True do
 begin
  ZeroMemory(@Buffer,SizeOf(Buffer));
  InternetReadFile(Forum,@Buffer,SizeOf(Buffer),BytesRead);
  if BytesRead=0 then Break;
  Res:=Res+Buffer;
 end;
finally
 InternetCloseHandle(Forum);
end;
finally
InternetCloseHandle(Internet);
end;
Res:=Copy(Res,1,Pos("</HTML>",Res)+6);
Memo1.Lines.Add(Res);
end;


Вот результат
<HTML>
<HEAD>
 <TITLE>
  Текст
 </TITLE>
 <META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
 <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate" />
</HEAD>
<BODY>
 Some Program
</BODY>
</HTML>


 
clickmaker ©   (2007-03-19 17:38) [16]

забыл...
флаги INTERNET_FLAG_HYPERLINK or INTERNET_FLAG_RELOAD

INTERNET_FLAG_EXISTING_CONNECT - это больше для ФТП


 
ProgRAMmer Dimonych ©   (2007-03-20 00:20) [17]

> clickmaker ©   (19.03.07 17:38) [16]
> забыл...
> флаги INTERNET_FLAG_HYPERLINK or INTERNET_FLAG_RELOAD
> INTERNET_FLAG_EXISTING_CONNECT - это больше для ФТП
Уже готов был радоваться, но... после одной нормальной загрузки снова выводит одно и то же.

Код...

Internet:=InternetOpen("Grace Forum Viewer",0,nil,nil,0);
if Assigned(Internet) then
begin
 Forum:=InternetOpenURL(Internet,"http://www.grace.ueuo.com/forum.php",nil,0,INTERNET_FLAG_HYPERLINK or INTERNET_FLAG_RELOAD,0);
 MessageBox(Form1.Handle,PChar(GetErrorText(False)),"",64);
 if Assigned(Forum) then
 begin
  Res:="";
  while True do
  begin
   ZeroMemory(@Buffer,SizeOf(Buffer));
   InternetReadFile(Forum,@Buffer,SizeOf(Buffer),BytesRead);
   if BytesRead=0 then Break;
   Res:=Res+Buffer;
  end;
 end;
 InternetCloseHandle(Forum);
end;
InternetCloseHandle(Internet);
Res:=Copy(Res,1,Pos("</HTML>",Res)+6);
Memo.Lines.Add(Res);

Кэш, похоже, не хочет отрубаться :(


 
Пиит   (2007-03-20 04:59) [18]


> Прибежали в избу дети,
> Второпях зовут отца...
> Тятя, тятя, наши сети
> Притащили ...


... подлеца.


 
clickmaker ©   (2007-03-20 12:02) [19]


> [17] ProgRAMmer Dimonych ©   (20.03.07 00:20)

у меня натурально работает...
меняю user agent в InternetOpen - возвращает каждый раз новый


 
ProgRAMmer Dimonych ©   (2007-03-20 14:58) [20]

> clickmaker ©   (20.03.07 12:02) [19]
> > [17] ProgRAMmer Dimonych ©   (20.03.07 00:20)
> у меня натурально работает...
> меняю user agent в InternetOpen - возвращает каждый раз
> новый
С выделенного места поподробнее, если можно...


 
VirEx ©   (2007-03-20 17:05) [21]

function DelHttp(URL: String): String;
begin
 if Pos("http://", URL) > 0 then Delete(Url, 1, 7);
 Result := Copy(Url, 1, Pos("/", Url) - 1);
if Result = "" then Result := URL;
end;

function TForm1.GetUrl(const URL: String; Header, Content: string;
 IsImage: boolean; ImageFileName: string): String;
var
 FSession, FConnect, FRequest: HINTERNET;
 FHost, FScript: String;
 Buff: array [0..1023] of byte;
 BytesRead: Cardinal;
 f: File;
begin
Result := "";

// Небольшой парсинг
// вытаскиваем имя хоста и параметры обращения к скрипту
FHost := DelHttp(Url);
FScript := Url;
Delete(FScript, 1, Pos(FHost, FScript) + Length(FHost));
// Инициализируем WinInet
form1.StatusBar1.SimpleText:="Инициализация подключения...";

//X это по умолчанию "юзер агент"
FSession := InternetOpen("X", INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if not Assigned(FSession) then begin
form1.StatusBar1.SimpleText:="Ошибка инициализации подключения";
Exit;
end;
try
// Попытка соединения с сервером
 form1.StatusBar1.SimpleText:="Соедиенние с сервером...";
 FConnect := InternetConnect(FSession, PChar(FHost), 80, nil, "HTTP/1.0", INTERNET_SERVICE_HTTP, 0, 0);
 if not Assigned(FConnect) then begin
 form1.StatusBar1.SimpleText:="Ошибка подключения к серверу";
 Exit;
 end;
 try
 // Подготавливаем запрос страницы
     if IsImage then
     FRequest := HttpOpenRequest(FConnect, "GET", PChar(FScript), "HTTP/1.1", "", nil, INTERNET_FLAG_RELOAD, 0)
     else
     FRequest := HttpOpenRequest(FConnect, "POST", PChar(FScript), "HTTP/1.1", "", nil, INTERNET_FLAG_RELOAD, 0);
     
     if not Assigned(FConnect) then Exit;
     try
       // Добавляем заголовки
       // вот здесь перезаписывается заголовок - Head, и юзер агент
       if not (HttpAddRequestHeaders(FRequest, PChar(Header), Length(Header), HTTP_ADDREQ_FLAG_REPLACE or HTTP_ADDREQ_FLAG_ADD)) then Exit;
       // Отправляем запрос
       form1.StatusBar1.SimpleText:="Отправка запроса...";
       if not (HttpSendRequest(FRequest, nil, 0, PChar(Content), Length(Content))) then begin
       form1.StatusBar1.SimpleText:="Ошибка отправки запроса";
       Exit;
       end;
       // Получаем ответ
        FillChar(Buff, SizeOf(Buff), 0);
        if IsImage then begin
            assignfile(f,ImageFileName{"1.jpg"});
            try
            Rewrite(F,1);
            except
            if messagebox(form1.handle,"файл невозможно записать, продолжить?","ОшЫбка!",MB_YESNO or MB_ICONHAND)=ID_NO then begin
              InternetCloseHandle(FRequest);
              InternetCloseHandle(FConnect);
              InternetCloseHandle(FSession);
              ExitProcess(1);
              end else begin
              InternetCloseHandle(FRequest);
              InternetCloseHandle(FConnect);
              InternetCloseHandle(FSession);
              form1.StatusBar1.SimpleText:="Загрузка прервана";
              exit;
              end

            end;
            form1.ProgressBar1.Max:=2383;
            form1.StatusBar1.SimpleText:="Получение изображения...";
          repeat
            application.ProcessMessages;
            //FillChar(Buff, SizeOf(Buff), 0);
            InternetReadFile(FRequest, @Buff, SizeOf(Buff), BytesRead);
            BlockWrite(F, Buff, BytesRead);
            form1.ProgressBar1.Position:=BytesRead;
            //inc(BytesIn,BytesRead); //<-- увеличиваем счетчик
          until BytesRead = 0;
            CloseFile(F);
            form1.StatusBar1.SimpleText:="Изображение получено, вводите символы";
        end else begin
          form1.StatusBar1.SimpleText:="Загрузка данных...";
          repeat
            Result := Result + PChar(@Buff);
            FillChar(Buff, SizeOf(Buff), 0);
            InternetReadFile(FRequest, @Buff, SizeOf(Buff), BytesRead);
            //inc(BytesIn,BytesRead); //<-- увеличиваем счетчик
          until BytesRead = 0;
            form1.StatusBar1.SimpleText:="Данные загружены";
          end;
      finally
       InternetCloseHandle(FRequest);
     end;
   finally
     InternetCloseHandle(FConnect);
   end;
 finally
   InternetCloseHandle(FSession);
 end;
end;

procedure Exec;
var
 s,msg:string;

 FindData: _WIN32_FIND_DATAA;
 h:THandle;
 Header:string;
begin
case Identification of
mOpera9:Header:=Opera9Header;
mIE6   :Header:=IE6Header;
end;
//загружаем контент
s:=form1.GetUrl("http://site.com",Header,"",false,"");

//загружаем картинку
form1.GetUrl("http://site.com/image.jpg",Header,"",true,"1.jpg");//урл картинки

GetCurrentDirectory(259,PChar(s));
h:=FindFirstFile(PChar(s+"1.jpeg"), FindData);
if h<>INVALID_HANDLE_VALUE then begin
try
g.LoadFromFile("1.jpg");

//файл пустой длины, избежание ошибки EJpeg #42
if g.Height+g.Width>2 then form1.Image1.Picture.Assign(g);

except
form1.StatusBar1.SimpleText:="Ошибка, перезапустите";
end;
end else form1.StatusBar1.SimpleText:="Ошибка загрузки изображения, перезапустите";

SuspendThread(t);
TerminateThread(t,DETACHED_PROCESS);
CloseHandle(t);
end;

//кнопочка "load" :)
procedure TForm1.Button1Click(Sender: TObject);
begin
if t=0 then begin
  form1.StatusBar1.SimpleText:="Старт...";
  t:=CreateThread(nil,0,@Exec,nil,IDLE_PRIORITY_CLASS{CREATE_SUSPENDED},tId)
  end else begin
  form1.StatusBar1.SimpleText:="Перезапуск...";
  SuspendThread(t);
  TerminateThread(t,DETACHED_PROCESS);
  CloseHandle(t);
  t:=CreateThread(nil,0,@Exec,nil,IDLE_PRIORITY_CLASS{CREATE_SUSPENDED},tId)
  end;
end;


 
VirEx ©   (2007-03-20 17:07) [22]

вот еще, заголовки оперы и ИЕ

Opera9Header="User-Agent: Opera/9.00 (Windows NT 5.1; U; ru)"#13#10+
 "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1"#13#10+
 "Accept-Language: ru,ru_RU;q=0.9,en;q=0.8"#13#10+
 "Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1"#13#10+
 "Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0"#13#10+
 "Connection: Keep-Alive, TE"#13#10+
 "TE: deflate, gzip, chunked, identity, trailers"#13#10+
 "Content-Type: application/x-www-form-urlencoded ";

 IE6Header="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*"#13#10+
 "Accept-Language: ru"#13#10+
 "Content-Type: application/x-www-form-urlencoded"#13#10+
 "Accept-Encoding: gzip, deflate"#13#10+
 "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"#13#10+
 "Connection: Keep-Alive"#13#10+
 "Cache-Control: no-cache";



Страницы: 1 вся ветка

Текущий архив: 2007.04.15;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.031 c
2-1174752222
Bogdan1024
2007-03-24 19:03
2007.04.15
Дибажить приложение


15-1174150455
Real
2007-03-17 19:54
2007.04.15
Микроволновка - что можно приготовить?


15-1174380182
ANB
2007-03-20 11:43
2007.04.15
Инсталляшка для БД на оракле


2-1174620688
delphim
2007-03-23 06:31
2007.04.15
разделитель целой и дробной частей


15-1174580946
oldman
2007-03-22 19:29
2007.04.15
Я всегда пользовался NERO (и подобными продуктами)