Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как лучше возвратить результат HTML (GET) запроса / 12 сообщений из 12, страница 1 из 1
07.05.2009, 08:38
    #35973389
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше возвратить результат HTML (GET) запроса
Задача внедрить в программу задолженность за услуги связи с внешнего сервера. На HTML запрос система возвращает xml - который я потом разбираю.
Проблема в том что буду присать внешнюю DLL или EXE для взаимодействия с сервером и использовать ее и основной программы. Как будет правильней возвращать из DLL или EXE полученные данные?
...
Рейтинг: 0 / 0
07.05.2009, 08:47
    #35973399
ПД
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше возвратить результат HTML (GET) запроса
Внедрить этот функционал в саму программу. :-)
...
Рейтинг: 0 / 0
07.05.2009, 08:59
    #35973417
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше возвратить результат HTML (GET) запроса
В том то и дело что в программе будет только вызов внешней процедуры и получение ответа. Потому что программа стоит в разных местах - и не везде это надо.
Я прошлый раз делал - вызывал внешнюю FXP с параматрами и возвращал массив. Почему FXP а не EXE - потому что FXP в текущем сеансе запускается а EXE создает новый сеанс и массив не возвращает. Но т.к. это не очень красиво, хочется по уму сделать. С DLL пока не работал, поэтому совет спрашиваю. Тем более что у нас несколько программ и эту функцию надо внедрить во все. Поэтому только внешний модуль нужен, унифицированный для всех.
...
Рейтинг: 0 / 0
07.05.2009, 09:23
    #35973456
VictorSK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше возвратить результат HTML (GET) запроса
Используте DLL и запускайте его как COM+. На эту тему поищите на www.foxclub.ru
...
Рейтинг: 0 / 0
07.05.2009, 12:29
    #35974100
fox_vik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше возвратить результат HTML (GET) запроса
А. С.В том то и дело что в программе будет только вызов внешней процедуры и получение ответа. Потому что программа стоит в разных местах - и не везде это надо.
Я прошлый раз делал - вызывал внешнюю FXP с параматрами и возвращал массив. Почему FXP а не EXE - потому что FXP в текущем сеансе запускается а EXE создает новый сеанс и массив не возвращает. Но т.к. это не очень красиво, хочется по уму сделать. С DLL пока не работал, поэтому совет спрашиваю. Тем более что у нас несколько программ и эту функцию надо внедрить во все. Поэтому только внешний модуль нужен, унифицированный для всех.
Если ЕХЕ создан в фоксе и запускается из фокса не командой RUN, то новый сеанс не создается. Все функции, вызываемые в ЕХЕ работают в одном адресном пространстве с вызывающей программой. Они также как и FXP могут принимать и возвращать массивы в качестве параметров.
Например, если в ВВВ.ЕХЕ есть функция FuncA, то ее можно вызвать как Do FuncA in BBB.EXE with ParamC
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
13.05.2010, 00:05
    #36624500
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше возвратить результат HTML (GET) запроса
Снова возвращаюсь к старому вопросу. Ткните носом пожалуйста, второй день маюсь.
Есть сервер, при помощи get-запроса я должен получить с него данные в xml формате.
Пытаюсь сделать так
o=CreateObject("InternetExplorer.Application")
cmd="https://proba.ru?act=makeDoc&user=user&pass=password"
o.Navigate(cmd)
при этом объект создается, o.Document.ReadyState отвечает что все удачно, но не знаю как вытащить данные. В IE и в Опере данные в окне браузера отображаются.
Есть и другие способы, кроме CreateObject("InternetExplorer.Application"), но что-то не получается тоже.
...
Рейтинг: 0 / 0
13.05.2010, 00:21
    #36624520
lo-pata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше возвратить результат HTML (GET) запроса
Ну так если данные в окне браузера получили, в чем дальше проблема?

Код: plaintext
1.
2.
3.
4.
oIE=CREATEOBJECT("InternetExplorer.Application")
oIE.visible = .t. && хотя видимым окно браузера делать не обязательно
oDoc = oIE.Document
loContent=oDoc.documentElement
lcString=loContent.outerHTML

А дальше разбирать содержимое - эту самую lcString и вытаскивать оттуда нужные данные :)
...
Рейтинг: 0 / 0
13.05.2010, 10:29
    #36624949
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше возвратить результат HTML (GET) запроса
Спасибо, я просто с oIE.Document не знал и не смог найти нигде.

Код: plaintext
1.
2.
3.
4.
5.
oIE=CREATEOBJECT("InternetExplorer.Application")
cmd="https://proba.ru?act=makeDoc&user=user&pass=password"
o.Navigate(cmd)
oDoc = oIE.Document
loContent=oDoc.documentElement
lcString=loContent.outerHTML

Но проблема следующая, нужные мне данные окне браузера отображаются так:
Код: plaintext
1.
2.
3.
4.
5.
 <?xml version="1.0" encoding="Windows-1251" ?> 
- <pay_response>
  <status_code>- 3 </status_code> 
  <fio /> 
  <time_stamp> 13 . 05 . 2010   10 : 18 : 52 </time_stamp> 
  </pay_response>

и мне хотелось бы в таком виде иметь данные, потому что в переменную lcString при этом я получаю весь код html страницы, где нужные мне данные находятся в таком виде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
<HTML><HEAD>
<STYLE>BODY{font:x-small 'Verdana';margin-right: 1 .5em}
.c{cursor:hand}
.b{color:red;font-family:'Courier New';font-weight:bold;text-decoration:none}
.e{margin-left:1em;text-indent:-1em;margin-right:1em}
.k{margin-left:1em;text-indent:-1em;margin-right:1em}
.t{color:# 990000 }
.xt{color:# 990099 }
.ns{color:red}
.dt{color:green}
.m{color:blue}
.tx{font-weight:bold}
.db{text-indent:0px;margin-left:1em;margin-top:0px;margin-bottom:0px;padding-left:.3em;border-left:1px solid #CCCCCC;font:small Courier}
.di{font:small Courier}
.d{color:blue}
.pi{color:blue}
.cb{text-indent:0px;margin-left:1em;margin-top:0px;margin-bottom:0px;padding-left:.3em;font:small Courier;color:# 888888 }
.ci{font:small Courier;color:# 888888 }
PRE{margin:0px;display:inline}</STYLE>

<SCRIPT><!--
function f(e){
if (e.className=="ci"){if (e.children( 0 ).innerText.indexOf("\n")> 0 ) fix(e,"cb");}
if (e.className=="di"){if (e.children( 0 ).innerText.indexOf("\n")> 0 ) fix(e,"db");}
e.id="";
}
function fix(e,cl){
e.className=cl;
e.style.display="block";
j=e.parentElement.children( 0 );
j.className="c";
k=j.children( 0 );
k.style.visibility="visible";
k.href="#";
}
function ch(e){
mark=e.children( 0 ).children( 0 );
if (mark.innerText=="+"){
mark.innerText="-";
for (var i= 1 ;i<e.children.length;i++)
e.children(i).style.display="block";
}
else if (mark.innerText=="-"){
mark.innerText="+";
for (var i= 1 ;i<e.children.length;i++)
e.children(i).style.display="none";
}}
function ch2(e){
mark=e.children( 0 ).children( 0 );
contents=e.children( 1 );
if (mark.innerText=="+"){
mark.innerText="-";
if (contents.className=="db"||contents.className=="cb")
contents.style.display="block";
else contents.style.display="inline";
}
else if (mark.innerText=="-"){
mark.innerText="+";
contents.style.display="none";
}}
function cl(){
e=window.event.srcElement;
if (e.className!="c"){e=e.parentElement;if (e.className!="c"){return;}}
e=e.parentElement;
if (e.className=="e") ch(e);
if (e.className=="k") ch2(e);
}
function ex(){}
function h(){window.status=" ";}
document.onclick=cl;
--></SCRIPT>
</HEAD>
<BODY class=st>
<DIV class=e><SPAN class=b> </SPAN> <SPAN class=m><?</SPAN><SPAN class=pi>xml version="1.0" encoding="Windows-1251" </SPAN><SPAN class=m>?></SPAN> </DIV>
<DIV class=e>
<DIV class=c style="MARGIN-LEFT: 1em; TEXT-INDENT: -2em"><A class=b onfocus=h() onclick="return false" href="#">-</A> <SPAN class=m><</SPAN><SPAN class=t>pay_response</SPAN><SPAN class=m>></SPAN></DIV>
<DIV>
<DIV class=e>
<DIV style="MARGIN-LEFT: 1em; TEXT-INDENT: -2em"><SPAN class=b> </SPAN> <SPAN class=m><</SPAN><SPAN class=t>status_code</SPAN><SPAN class=m>></SPAN><SPAN class=tx>- 3 </SPAN><SPAN class=m></</SPAN><SPAN class=t>status_code</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="MARGIN-LEFT: 1em; TEXT-INDENT: -2em"><SPAN class=b> </SPAN> <SPAN class=m><</SPAN><SPAN class=t>fio</SPAN> <SPAN class=m>/></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="MARGIN-LEFT: 1em; TEXT-INDENT: -2em"><SPAN class=b> </SPAN> <SPAN class=m><</SPAN><SPAN class=t>time_stamp</SPAN><SPAN class=m>></SPAN><SPAN class=tx> 13 . 05 . 2010   10 : 01 : 42 </SPAN><SPAN class=m></</SPAN><SPAN class=t>time_stamp</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV><SPAN class=b> </SPAN> <SPAN class=m></</SPAN><SPAN class=t>pay_response</SPAN><SPAN class=m>></SPAN></DIV></DIV></DIV></BODY></HTML>
можно ли получить только xml? А то как-то много разбирать придется.
...
Рейтинг: 0 / 0
13.05.2010, 11:09
    #36625084
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше возвратить результат HTML (GET) запроса
> Автор: А. С.
> Но проблема следующая, нужные мне данные окне браузера отображаются так:
....
> и мне хотелось бы в таком виде иметь данные, потому что в переменную lcString при этом я получаю весь код html
> страницы, где нужные мне данные находятся в таком виде:

Тебе придется вытаскивать нужные данные самостоятельно, потому что сервер возвращает не XML, а HTML имитирующий
XML.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
13.05.2010, 11:27
    #36625127
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше возвратить результат HTML (GET) запроса
Получилось!!!

Код: plaintext
1.
2.
3.
4.
5.
oIE=CREATEOBJECT("InternetExplorer.Application")
cmd="https://proba.ru?act=makeDoc&user=user&pass=password"
oIE.Navigate(cmd)
oDoc = oIE.Document
loContent=oDoc.documentElement
lcString=loContent.InnerText
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
05.12.2011, 11:58
    #37558976
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше возвратить результат HTML (GET) запроса
Здравствуйте, вопрос снова поднимаю.
Теперь есть задача переделать данную конструкцию без поднятия "InternetExplorer.Application".
Как вариант попробовать wininet.dll, но не пойму как это сделать. Нужно принять xml без сохранения на диск, то есть GetUrlToFile не подходит.
Может непонятно написал, поправьте.
...
Рейтинг: 0 / 0
05.12.2011, 12:48
    #37559076
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше возвратить результат HTML (GET) запроса
ошибка в сообщении выше, URLDownloadToFile не хочется использовать, т.к. в файл надо сохранять уже результат распарсивания XML
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как лучше возвратить результат HTML (GET) запроса / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]