Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > приложение и web


Автор: sniron 24.2.2005, 23:52
Как можно связать свое приложение с web? Допустим что бы приложение передавало какое – нибудь значение, например переменной в php скрипте. Спасибо.

Автор: Александра 25.2.2005, 00:15
sniron
ну например через POST запрос... а что конкретнее?

Автор: Snowy 25.2.2005, 09:37
Код
otvet:=TIdHTTP.Get('http://www.site.ru/script.php?chtoto=znachenie');

Автор: sniron 25.2.2005, 23:51
А какой тип переменной otvet? И какие значение она может принимать?

Автор: Alex 26.2.2005, 00:00
Snowy, Get насколько я знаю, это процедура, а не функция. smile

Автор: Александра 26.2.2005, 00:17
Alex
все верно, есть как ф-ия, возврашает string, а есть и процедура, у которой вторым параметром должен быть наследник TStream'а куда возврашается результат запроса

Автор: Alex 26.2.2005, 00:27
Александра точно. smile

Автор: Snowy 27.2.2005, 08:58
Цитата(sniron @ 25.2.2005, 23:51)
А какой тип переменной otvet? И какие значение она может принимать?

Читай документацию по TIdHTTP.
В данном случае otvet - это string, в который будет засунута страница, которую вернет php скрипт.
Пример довольно абстрактный, поскольку сам TIdHTTP это класс, экземпляр которого тебе предстоит создать (или кинуть на форму).

Автор: sniron 27.2.2005, 14:54
А где можно скачать нормальный хелп с примерами по TIdHTTP, кроме как из встроенной справки? Моя задача - внедрить в программу модуль регистрации в нете, что бы определенные данные передавались ПХП скрипту, ну а тот уже в БД заносил. smile

Автор: Snowy 27.2.2005, 17:51
Код

var
 www: TIdHTTP;
begin
 www:=TIdHTTP.Create(nil);
 try
   www.Get('http://www.site.ru/script.php?chtoto=znachenie');
 except end;
 www.Free;
end;

Добавлено @ 17:55
Но, если у пользователя прокси, то такой номер не пройдет.
Тут лучше сказать браузеру, чтобы он открыл твою страничку и передал данные.
Код

Const
 URL : String = 'http://www.site.ru/script.php?chtoto=znachenie';
begin
 ShellExecute(0,'open',pChar(URL),NIL,NIL,SW_SHOWNORMAL);

Правда в этом случае придется пользователю страничку показывать.

Автор: sniron 27.2.2005, 21:52
Snowy, Да конечно 2 вариант примитивный но надежный. Ладно, огромное спасибо!

Автор: Александра 28.2.2005, 12:18
sniron

Snowy фигни не посоветует )) Просто можно немного улучшить идею!

можно взять компонент TWebBrowser, кинуть на форму, спрятать его, далее в реестре открыть
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings и считать параметр ProxyServer, где настроен прокси в IE. Далее заставим наш WebBrowser работать через этот прокси и делаем запрос по нужному адресу:

Код
uses urlmon, wininet;

var PIInfo: PInternetProxyInfo;
begin
 new(PIInfo);
 PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY;
 PIInfo^.lpszProxy := PAnsiChar('прокси:порт');
 UrlMkSetSessionOption(INTERNET_OPTION_PROXY, piinfo, SizeOf(Internet_Proxy_Info), 0);
 
 WebBrowser1.Navigate('http://www.site.ru/script.php?chtoto=znachenie');

 dispose(PIInfo);
end;


есть конечно другие недостатки, но все же...

Автор: Snowy 28.2.2005, 12:46
А зачем TWebBrowser? Это тот же IE. С тем же успехом можно взять эти параметры и отдать их IIdSMTP. В большинстве случаев это даже сработает.
Но!
Например я сижу за прокси, о котором IE даже не подозревает. А эти строчки набиваю в Opere, которая браузер по умолчанию.
Поэтому я и предложил "второй вариант". Ибо он гораздо надежней.
Но мой случай редкий.
В 80% достаточно просто запроса через IdHTTP. В 95% - если дополнительно взять инфу о прокси из реестра и дать IdHTTP. 99.9%, если использовать второй вариант.
Вопрос в том, хотим ли мы, чтобы пользователь знал о том, что мы передаем инфу в инет или нет. Ибо все равно еще есть прокси, пароли... Поэтому проще делать это в открытую.

Автор: Александра 28.2.2005, 13:02
Snowy
под недостатками я и имела ввиду что-нить типа настроек прокси в Опере ))

а вот про натравление idHTTP на прокси не знала smile Опыт работы с Indy очень мал. )) Но если делать просто по 2 варианту, то нельзя послать к примеру POST запросы и, самое похое, GET запросы сохряняются в истории и пользователь на них потом бывает натыкается (( Пройденный этап.

Автор: Snowy 28.2.2005, 13:13
У IdHTTP есть свойство ProxyParams. Вот туда можно запихать сервер и порт, которые живут в реестре... Но для прокси обычно требуются еще имя и пароль, которые нам никто не докладывал... Так что знание прокси обычно не сильно помогает. Разве что спросить имя и пароль у пользователя smile Я бы такой программе не сказал бы. Мало ли зачем ей... ;)

Автор: sniron 28.2.2005, 14:18
Понятно, а если, скажем, от скрипта к приложению требуется передать какое - нить значение. Че делать?

Автор: Snowy 28.2.2005, 14:53
Тогда только IdHTTP.Get. Как я писал - он возвращает страниску в один цельный string.
Хотя можно конечно попробовать можно попробовать через OLE вызывать експлорер и пытаться забрать у него...
Но лучше все же через IdHttp с проверкой на прокси.

Автор: sniron 28.2.2005, 15:40
Snowy А примерчик можно, если не трудно smile

Автор: Snowy 28.2.2005, 15:47
А примерчик все тот же:
Код

var
 www: TIdHTTP;
 s: string;
begin
 www:=TIdHTTP.Create(nil);
 try
   s:=www.Get('http://www.site.ru/script.php?chtoto=znachenie');
 except end;
 www.Free;
end;

Вот в этой s и будет страничка, которую вернет скрипт.
Добавлено @ 15:50
Конечно, если удастся соедениться и получить страницу, инаце в s будет что-попало.
Поэтому предварительно s нужно занулить.

Автор: sniron 28.2.2005, 15:54
Snowy, Так нужна не вся страница а только определенное значение, ведь преемення будет с тегами? smile

Автор: Александра 28.2.2005, 15:58
sniron
так найди что нужно. а вообше просто скрипт должен вывести тебе то, что тебе необходимо и больше ничего!

такой вот левенький пример:
Код
<?php
 if ($_GET['chtoto']=='znachenie') { die('ok'); }
?>
<html>
.... просто страничка к примеру...


т.е. в итоге ты получишь в результате или ok, если передан верный параметр или страничку. короче это зависит уже от скрипта...

Автор: sniron 28.2.2005, 16:32
Т.е. наскоко я хорошо понял в результате работы скрипта
Код

var
www: TIdHTTP;
s: string;
begin
www:=TIdHTTP.Create(nil);
try
  s:=www.Get('http://www.site.ru/script.php?chtoto=znachenie');
except end;
www.Free;
end;

и пхп скрипта
Код

<?php
if ($_GET['chtoto']=='znachenie') { die('ok'); }
?>

я получу переменую s равную слову "ок"?

Автор: Александра 1.3.2005, 00:28
sniron
совершенно верно!!! )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)