AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.12.2014, 15:53   #21  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
X++:
webRequest = System.Net.WebRequest::Create("http://review.maxoptra.com");
    webRequest.set_Method("POST");
    postData = "http://review.maxoptra.com/rest/2/authentication/createSession?accountID=XXX&user=XXX&password=XXX";
    //postData = "";
    encodingUTF8 = System.Text.Encoding::get_UTF8(); // пробовал другие кодировки
    byteArray = encodingUTF8.GetBytes(postData);
    leng = byteArray.get_Length(); // длина соответствует длине postData
    webRequest.set_ContentType("application/x-www-form-urlencoded");
    webRequest.set_ContentLength(byteArray.get_Length());
    //credentialCache =  System.Net.CredentialCache::get_DefaultCredentials();
дальше все как Kabardian писал. Что бы я не запихивал в postData в infolog выводится
ОК
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="shortcut icon" href="/mxm/favicon.ico" type="image/x-icon"/>

<script type="text/javascript" src="/mxm-commons/commons/app-template.js" charset="utf-8"></script>
<script type="text/javascript" src="/mxm/mxm-api/file/app-template.js" charset="utf-8"></script>
<script type="text/javascript">
var application = null;
var MX_DIR = "/mxm/";
var MXM_DIR = "/mxm/";
var MX_DEBUG_MODE = false;
</script>

<link rel="stylesheet" type="text/css" href="/mxm-commons/ext/resources/css/ext-all.css?3.3.1.GT rev:49875"/>
<link rel="stylesheet" type="text/css" href="/mxm-commons/packed/commons-main.css?3.3.1.GT rev:49875"/>
<script type="text/javascript" src="/mxm-commons/ext/adapter/ext/ext-base.js?3.3.1.GT rev:49875"></script>
<script type="text/javascript" src="/mxm-commons/ext/ext-all/ext-all.js?3.3.1.GT rev:49875"></script>
<script type="text/javascript" src="/mxm-commons/packed/commons-main.js?3.3.1.GT rev:49875"></script>
<script type="text/javascript" src="/mxm-commons/packed/commons-login-form.js?3.3.1.GT rev:49875"></script>
<script type="text/javascript" src="/mxm-commons/packed/commons.js?3.3.1.GT rev:49875"></script>
<title>Maxoptra Management Application [3.3.1.GT rev:49875]</title>
<script type="text/javascript">
eventManager = new mx.app.widget.EventManager();
Ext.onReady(function () {
application = new mx.Application();
});
</script>
</head>
<body>
<form id="history-form" class="x-hidden" action="">
<input type="hidden" id="x-history-field"/>
<iframe id="x-history-frame"></iframe>
</form></body>
</html>
может в какой-то тонкости хитрость?
проверял запрос из postData в Google Chrome в расширении Advanced Rest Client все красиво, отвечает
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<apiResponse version="1.0">
<authResponse>
<sessionID>01c98206543e491f85905c4723e12432</sessionID>
</authResponse>
</apiResponse>

Последний раз редактировалось smailik; 09.12.2014 в 15:57.
Старый 09.12.2014, 17:29   #22  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от smailik Посмотреть сообщение
X++:
hURL = winInetLocal.internetConnect("review.maxoptra.com", "XXX", "XXX");
Ax подвисает секунд на 20, но на этом все.
Попробуйте для начала к www.yandex.ru приконнектиться без логина и пароля. Если получится, то попробуйте просто браузером войти на адрес
http://login : password@url

где url - это адрес сервера. Если не получится, то значит у вас адрес неправильный. Страница запроса логина и пароля может не совпадать со страницей, куда отсылается запрос.
Скорее всего у вас не получится, так как логин и пароль, которые передаются в internetConnect - это которые веб-сервер запрашивает, а на указанной вами странице возможно не так логин и пароль передаются на сервер.
С этим нужно будет разбираться, так как в каждом случае по разному может быть.
Старый 10.12.2014, 08:12   #23  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
попробовал с яндексом
X++:
        info (time2Str(timeNow(), 1, 1));
        hURL = winInetLocal.internetConnect("www.yandex.ru", "", "");
        info (time2Str(timeNow(), 1, 1));
остальное все как раньше
результат выполнения
Сообщение (09:07:23)
08:57:22
09:07:23
hURL 0, hReq 0, res 0, ret
Старый 10.12.2014, 08:21   #24  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Заметил вот какую штуку. Просто так в браузере под своим логином и паролем не могу зайти на review.maxoptra.com, но если зайду на review.maxoptra.com/XXX/ где XXX = имя аккаунта, и введу логин пароль, то меня пускает. Пробовал
X++:
hURL = winInetLocal.internetConnect("review.maxoptra.com/XXX/", "XXX", "XXX");
строчку проходит даже не думая, результат выполнения 0.
Кто нибудь конектился так по хитрому что не только логин и пароль, но еще и аккаунт указывать надо?
Старый 10.12.2014, 09:40   #25  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от smailik Посмотреть сообщение
попробовал с яндексом
У вас точно прямой доступ в интернет и нет никаких прокси?

Цитата:
Сообщение от smailik Посмотреть сообщение
Кто нибудь конектился так по хитрому что не только логин и пароль, но еще и аккаунт указывать надо?
Это от сервера зависит. Может у них ЧПУ так настроены и на самом деле передается что-то типа ?login=xxx. Но это не важно, важно что запрашивается логин пароль после этого. Вот если бы не спросил пароль, тогда это бы что-то значило
Старый 10.12.2014, 09:56   #26  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Успешной получилась попытка реализовать нужную мне штуку через
X++:
    Url urlReq;
    COM myXmlHttp;
    str result;
    ;
    myXmlHttp = new COM("Microsoft.XMLHTTP");
    urlReq = "http://review.maxoptra.com/rest/2/authentication/createSession?accountID=XXX&user=XXX&password=XXX";
    myXmlHttp.open("POST",urlReq,false);
    myXmlHttp.send("");
    result = myXmlHttp.responseText();
    info(result);
в result как раз то что мне и нужно
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<apiResponse version="1.0">
<authResponse>
<sessionID>a59dfa4a58924bcebd0fcfaa551f0171</sessionID>
</authResponse>
надо еще попыхтеть над другими вариантами решения поставленной задачи.
Всем огромное спасибо.
Старый 10.12.2014, 10:59   #27  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Цитата:
Сообщение от smailik Посмотреть сообщение
дальше все как Kabardian писал. Что бы я не запихивал в postData в infolog выводится
...
может в какой-то тонкости хитрость?
smailik, мой пример был всего лишь калькой x++ примера на c# , хотел показать что использовать .NET в AX не так страшно и можно отказаться от WinAPI. Конечно же, нужно чуть ближе ознакомиться с классом (на том же MSDN) и заточить под свой случай, протестировать, отладить, поиграться с разными параметрами. Если есть Visual Studio под рукой лучше сначала на c# проверять и получить работающий результат, а потом уже перевести код в x++.

Вот есть похожий на ваш пример сервис - если отправить запрос на https://telenorcsms.com.pk:27677/cor...x&password=xxx, то он возвращает XML ответ, похожий на ваш:
X++:
<?xml version="1.0" encoding="UTF-8" ?>
<corpsms>
  <command>Auth_request</command>
  <data>Error 200</data>
  <response>Error</response>
</corpsms>
Немного подправил джобик и получил точно такой же ответ в AX:
X++:
static void MicrosoftWebRequestSample(Args _args)
{
    System.Net.WebRequest           webRequest;
    System.Net.ICredentials         credentialCache;
    System.Net.HttpWebResponse      httpWebResponse;

    System.IO.Stream                stream;
    System.IO.StreamReader          streamReader;

    str postData;
    System.Byte[] byteArray;
    System.Text.Encoding    encodingUTF8;

    str statusDescription;
    str responseFromServer;
    ;

    //1. Создать запрос.
    webRequest = System.Net.WebRequest::Create("https://telenorcsms.com.pk:27677/corporate_sms2/api/auth.jsp?msisdn=xxxx&password=xxx"); //этот веб-сервис отправляет в ответ данные, которые были направлены ему.
    webRequest.set_Method("POST");

    //2. Ввести данные к отправке и ковертировать их в массив байтов
    postData = ":27677/corporate_sms2/api/auth.jsp?msisdn=xxxx&password=xxx";
    encodingUTF8 = System.Text.Encoding::get_UTF8();
    byteArray = encodingUTF8.GetBytes(postData);

    //3. Изменить свойства запроса: ContentType, ContentLength.
    //webRequest.set_ContentType("application/x-www-form-urlencoded"); text/xml;charset=UTF-8
    webRequest.set_ContentType("text/xml;charset=UTF-8"); 
    webRequest.set_ContentLength(byteArray.get_Length());

    //4. Если требуется авторизация, то указать учетные данные.
    credentialCache =  System.Net.CredentialCache::get_DefaultCredentials();

    //5. Получить поток с данными.
    stream = webRequest.GetRequestStream();

    //6. Записать поток данных.
    stream.Write(byteArray, 0, byteArray.get_Length());

    //7. Закрыть поток.
    stream.Close();

    //8. Получить ответ.
    httpWebResponse = webRequest.GetResponse();

    //9. Отобразить статус.
    statusDescription = httpWebResponse.get_StatusDescription();
    info(strFmt("%1", statusDescription));

    //10. Получить поток с данными.
    stream = httpWebResponse.GetResponseStream();

    //11. Открыть поток с помощью StreamReader.
    streamReader = new System.IO.StreamReader(stream);

    //12. Прочитать содержимое.
    responseFromServer = streamReader.ReadToEnd();

    //13. Вывести содержимое в инфолог.
    info(strFmt("%1", responseFromServer));

    //14. Закрыть все.
    streamReader.Close();
    stream.Close();
    httpWebResponse.Close();
}
За это сообщение автора поблагодарили: Logger (3).
Старый 10.12.2014, 11:44   #28  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Цитата:
Сообщение от smailik Посмотреть сообщение
Что бы я не запихивал в postData в infolog выводится
ОК
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="shortcut icon" href="/mxm/favicon.ico" type="image/x-icon"/>

<script type="text/javascript" src="/mxm-commons/commons/app-template.js" charset="utf-8"></script>
<script type="text/javascript" src="/mxm/mxm-api/file/app-template.js" charset="utf-8"></script>
<script type="text/javascript">
var application = null;
var MX_DIR = "/mxm/";
var MXM_DIR = "/mxm/";
var MX_DEBUG_MODE = false;
</script>

<link rel="stylesheet" type="text/css" href="/mxm-commons/ext/resources/css/ext-all.css?3.3.1.GT rev:49875"/>
<link rel="stylesheet" type="text/css" href="/mxm-commons/packed/commons-main.css?3.3.1.GT rev:49875"/>
<script type="text/javascript" src="/mxm-commons/ext/adapter/ext/ext-base.js?3.3.1.GT rev:49875"></script>
<script type="text/javascript" src="/mxm-commons/ext/ext-all/ext-all.js?3.3.1.GT rev:49875"></script>
<script type="text/javascript" src="/mxm-commons/packed/commons-main.js?3.3.1.GT rev:49875"></script>
<script type="text/javascript" src="/mxm-commons/packed/commons-login-form.js?3.3.1.GT rev:49875"></script>
<script type="text/javascript" src="/mxm-commons/packed/commons.js?3.3.1.GT rev:49875"></script>
<title>Maxoptra Management Application [3.3.1.GT rev:49875]</title>
<script type="text/javascript">
eventManager = new mx.app.widget.EventManager();
Ext.onReady(function () {
application = new mx.Application();
});
</script>
</head>
<body>
<form id="history-form" class="x-hidden" action="">
<input type="hidden" id="x-history-field"/>
<iframe id="x-history-frame"></iframe>
</form></body>
</html>
А вот это означает что при обращении к веб-вервису он вернул не XML в ответ, а обычную веб-страницу. Скорее всего, какая-то ошибка в запросе.
Старый 12.12.2014, 12:46   #29  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Попробовал вот так вот
X++:
urlReq = "http://review.maxoptra.com/rest/2/authentication/createSession?accountID=XXX&user=XXX&password=XXX";
    
    //1. Создать запрос.
    webRequest = System.Net.WebRequest::Create(urlReq);
    webRequest.set_Method("POST");
    
    //2. Ввести данные к отправке и ковертировать их в массив байтов
    postData = "";
    encodingUTF8 = System.Text.Encoding::get_UTF8();
    byteArray = encodingUTF8.GetBytes(postData);
и пример предложенный Kabardian начал работать. Запустил и в ответ получил:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<apiResponse version="1.0">
<authResponse>
<sessionID>EA5A18860C8E2273931990C8505096F9</sessionID>
</authResponse>
</apiResponse>
За это сообщение автора поблагодарили: Kabardian (1).
Старый 12.12.2014, 14:43   #31  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Цитата:
Сообщение от Player1 Посмотреть сообщение
Спасибо смотрел я эту тему. Там используется класс XMLHTTPRequest
Кстати вы же писали ранее
Цитата:
Сообщение от Player1 Посмотреть сообщение
Может подойдет пример из Tutorial_XMLPost, там используется класс XMLHTTPRequest
на что я Вам ответил
Цитата:
Сообщение от smailik Посмотреть сообщение
У меня нет такого туториала, кстати как и класса XMLHTTPRequest. Поделитесь xpo-шником?
ответа на это уже не было
Старый 24.03.2015, 19:37   #32  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
В AX 2012 также см. класс для работы с веб-запросами \Classes\RetailCommonWebAPI.
За это сообщение автора поблагодарили: macklakov (3).
Теги
settimeout, webservice

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Standart Costing, Direct Costing и механизмы их реализации в Аксапте slava09 DAX: Функционал 55 05.06.2006 11:00
Система оповещений в Аксапте (события в Аксапте) raunio DAX: Прочие вопросы 1 29.09.2005 15:44
Аналитический учет в Аксапте. Анна DAX: Прочие вопросы 38 06.04.2005 14:04
Размышления на тему “Системы контроля версий в Аксапте”. Андре DAX: База знаний и проекты 31 07.02.2005 12:29
Скорость в Аксапте Алексей Контев DAX: Прочие вопросы 13 25.06.2002 14:37

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:21.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.