как сделать запрос данных с сервера?

Тема в разделе "Lotus - Программирование", создана пользователем nadezdaMP, 1 окт 2009.

  1. nadezdaMP

    nadezdaMP Гость

    на сервере есть база данных, в ней форма, по нажатию кнопки отображаются данные с ресурса в инете. пользователь открывает базу у себя, при попытке получить данные с инета лотус запрашивает логин пароль на доступ к прокси. на сервере доступ к инету осуществляется напрямую, без логина-пароля. значит запрос данных идет не с сервера а с клиента.
    как обойти запрос пароля логина у пользователя? чтобы запрос данных был с сервера? :)
     
  2. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    В голову лезет всякая фигня вроде серверный агент с одной стороны и
    Код (Text):
    Call notesUIWorkspace.URLOpen( Url$, reload%, urlList%, charset$, webusername$, webpassword$, proxywebusername$, proxywebpassword$, notesRetriever )
    с другой.
     
  3. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    вебретривер? :)
    ставим клиенту тунель на сервер, биндим все адреса на локалхост...
    но всё это от лукавого - не надо бороться с админами - накажут :)
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    покаж код, который тянет данные, может, что-то придумаем...
     
  5. nadezdaMP

    nadezdaMP Гость

    Не судите строго!!! =))

    Sub Click(Source As Button)
    Set session = New NotesSession
    Set ws = New notesuiworkspace
    Set db = session.CurrentDatabase
    Set doc=ws.CurrentDocument.Document

    Set xml = CreateObject("Microsoft.XMLHTTP")
    For i = 1 To ...
    Select Case i
    Case 1 ' Погода
    url$ = "http://informer.gismeteo.ru/rss/27612.xml"
    Case 2
    ................................................................................
    ..........................
    End Select
    w_1$ = "w" + Cstr(i) + "_1"
    w_2$ = "w" + Cstr(i) + "_2"
    w_3$ = "w" + Cstr(i) + "_3"
    w_4$ = "w" + Cstr(i) + "_4"
    Call GetWeather(url$, w_1$, w_2$, w_3$, w_4$)
    Next
    Call doc.Save(True, True)

    End Sub


    Sub GetWeather(inUrl As String, w_1 As String, w_2 As String, w_3 As String, w_4 As String)
    Call xml.open("GET", inUrl, False)
    Call xml.send()
    w1$ = xml.responseText
    w1$ = Strright(w1$, "<item>")
    w2$ = w1$
    w1$ = Strleft(w1$, |</item>|)
    w1_t$ = Strright(w1$, "<title>")
    w1_t$ = Strleft(w1_t$, |</title>|)
    w1_d$ = Strright(w1$, "<description>")
    w1_d$ = Strleft(w1_d$, |</description>|)

    w2$ = Strright(w2$, "<item>")
    w2$ = Strleft(w2$, |</item>|)
    w2_t$ = Strright(w2$, "<title>")
    w2_t$ = Strleft(w2_t$, |</title>|)
    w2_d$ = Strright(w2$, "<description>")
    w2_d$ = Strleft(w2_d$, |</description>|)
    Call doc.ReplaceItemValue(w_1, Cstr(w1_t$) + "; " )
    Call doc.ReplaceItemValue(w_2, Cstr(w1_d$) + "; ")
    Call doc.ReplaceItemValue(w_3, Cstr(w2_t$) + "; " )
    Call doc.ReplaceItemValue(w_4, Cstr(w2_d$) + "; ")
    End Sub

    это код кнопки на форме, база на сервере. с админами лень разбираться, лучше что нибудь придумать =)


    пробовала реализовать следующим образом - шедульным агентом в базе на сервере скачивать данные и сохранять в отдельный документ, при открытии базы брать данные уже из этого дока, но у меня не получилось, как только не пробовала.
    видимо потому что при создании нового дока, при открытии базы, у notesUIdocument "отсутствует" свойство Document (хотела взять текущий документ), наткнулась на форуме. или как то это можно сделать?
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    а здесь нечего судить :(
    вы исползуете мсявую шнягу имярек АктивХу
    оно инициализируется на клиенте и, стало быть, на клиенте и тянет
    использовать на сервере АктивХу ябы не рекомендовал (можете и сервак уронить доминошный)
    переписывайте на вызов агента на сервере и джава (примеров достаточно)

    и UI классы невозможно юзать на сервере (по понятным причинам)
    агенту надо передать UNID дока, в него слить содержимое и получить резалт в клиенте
     
  7. nadezdaMP

    nadezdaMP Гость

    агенту передать юнид дока, и записать в него содержимое, то понятно,
    непонятно как получить резалт в клиенте, можно подробнее, пример бы =)

    если агента переписать на ява, то нужно будет на сервере домино службу вебретривер запускать? а на лотус скрипте сделать никак??

    и буду очень благодарна, если скинете ссылку на какой нибудь такой один пример(агента)!!! потому что научно тыкать во все не хочется!! =)
     
  8. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Call xml.open("GET", inUrl, False,"логин к прокси","пароль к прокси") или что-то в этом роде...
     
  9. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    ретривр запускать не надо
    в джава ничего страшного нет (сплошные плюсы :( )
     
  10. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код (Text):
    Set doc = db.getdocumentByURL("http://informer.gismeteo.ru/rss/27612.xml")
    и распарсить
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    джава пример:
    http://www.nsftools.com/tips/InternetFile.java
    и вообще - ресурс http://www.nsftools.com/tips
    крайне полезен :(
    можете парсить на клиенте, можете на сервере

    доминошный db.getdocumentByURL имеет ограничения и невсегда удобен (и тогда вот возня с Нафигатор БД и ретривером)

    есть более простой вариант (джава)
    http://web3.inttrust.ru/Site/itforum.nsf/f...33;OpenDocument

    а читать по getdocument (и почему лучше не юзать):
    http://web3.inttrust.ru/Site/itforum.nsf/a...BD?OpenDocument
     
  12. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    nadezdaMP
    вроде можно малой кровью: заменив Microsoft.XMLHTTP на MSXML2.XMLHTTP. Второй умеет юзать прокси из настроек IE.
     
  13. nadezdaMP

    nadezdaMP Гость

    простой агент на яве, в базе на сервере(на сервере стоит линукс)
    заваливается на команде url.openStream();
    подключение к локальным и фтп ресурсам выполняется без претензий, при попытке подключиться к ресурсу в инете не срабатывает, подскажите пожалуйста почему?)

    видимо нужно указать настройки прокси? если да то каким образом?
    Код (Text):
    import lotus.domino.*;
    import java.net.*;
    import java.io.*;
    import java.util.Vector;

    public class JavaAgent extends AgentBase {

    public void NotesMain() {

    try {
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();
    // (Your code goes here)

    URL url = new URL("http://informer.gismeteo.ru");
    InputStream is = url.openStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is, "windows12-51"));
    try {
    String nextLine=null;
    while ((nextLine=br.readLine())!=null)
    System.out.println(nextLine);
    }
    catch(EOFException e) {
    e.printStackTrace();
    }

    br.close();
    is.close();
    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    }
     
  14. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    чтобы понять "почему" - обычно, достаточно посмотреть трэйс стека ошибок... (он выводится на консоль сервера, в данном случ.)
    такое ощущение - что первую ссылку вы даже не смотрели :D
    там третий конструктор использует адрес прокси и порт

    а чтобы было с авторизацией:
    http://www.javaworld.com/javaworld/javatip...-javatip42.html
     
  15. nadezdaMP

    nadezdaMP Гость

    а каким именно образом? интересно, почему такое может произойти.
     
  16. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    очень просто - все АктивХу - суть инородные элементы для Домино (исключая таковые самой Домины)...
    это dll, кот. написаны непонятно кем (в общем случае) вне чётких спецификаций (у МС они постоянно меняются ;) )
    вызовы их могут вызывать блокировки файлов, процессов, обращение к ГУИ...
    всё это неподконтрольно вызывающему процессу
    в конечном итоге, часто, приводит к утечкам памяти (опять же - неконтролируемым)
    повторный вызов может вернуть некоректную структуру, что вызовет (это ведь нативный бинарник) крах вызывающего (читайте - Домино)

    добавим сюда зависимость КОМов от процесса регистации и, стало-быть, целостности регистри (тяжёлой и корявой реализации хранения настроек в Виндовз)

    др. словами - вероятность обрущения Домины сторонними длл больше, нежели родными, и к этому добавляются ошибки реализации ф-ций, кот. закрыты и неизменны (в тек. реинкарнации, конкрет. изделия АктивХу)
     
  17. nadezdaMP

    nadezdaMP Гость

    код на яве, не судите строго =))
    если кому интересно, и чтоб новичкам не мучаться

    Код (Text):
    import lotus.domino.*;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.xpath.XPath;
    import javax.xml.xpath.XPathConstants;
    import javax.xml.xpath.XPathExpression;
    import javax.xml.xpath.XPathFactory;
    import java.io.InputStream;
    import java.net.URL;

    public class JavaAgent extends AgentBase {
    public void NotesMain() {
    try {
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();
    // (Your code goes here)
    Log log = session.createLog("javaxml");
    log.openFileLog("c:/javaxml.log");
    System.setProperty("http.proxyHost", "000.000.000.000");  //прокси
    System.setProperty("http.proxyPort", "0000");        //порт
    System.setProperty("http.proxyUser", "user");
    System.setProperty("http.proxyPassword", "password");
    //URL url = new URL("http://informer.gismeteo.ru/rss/29838.xml");   //у меня к инету не подключается хоть убейся
    URL url = new URL("file://localhost/C:/1.xml");                              //зато с локала читает на ура
    InputStream inputStream = url.openConnection().getInputStream();
    try{
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    Document document = documentBuilder.parse(inputStream);
    XPathFactory xPathFactory = XPathFactory.newInstance();
    XPath xPath = xPathFactory.newXPath();
    XPathExpression xPathExpression = xPath.compile("/rss/channel/item");
    NodeList nodeList = (NodeList)xPathExpression.evaluate(document, XPathConstants.NODESET);
    for (int i=0; i<nodeList.getLength(); ++i) {
    Element element = (Element)nodeList.item(i);
    String title = element.getElementsByTagName("title").item(0).getTextContent();
    String description = element.getElementsByTagName("description").item(0).getTextContent();
    // вот тут можно сохранить в базу
    System.out.println(title + ": " + description);
    }
    }
    finally {
    inputStream.close();
    }

    //log.close();
    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    }
    почему с инета не читает не ясно.
     
  18. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    меня смущает, что вы не указываете тип аутентификации и не энкодите имя:пароль
    посмотрите подробное описание:
    http://www.rgagnon.com/javadetails/java-0085.html
     
Загрузка...

Поделиться этой страницей