|
![]() |
#1 |
Участник
|
X++: WinInet winInet = new WinInet(...); //internetOpen вызывается в new int hURL; int hReq; int res; str ret; if (winInet.ok()) { hURL = winInet.internetConnect(servername,80); hReq = winInet.OpenRequest(hURL, url, 'POST'); res = winInet.SendRequest(hReq, hdr, data); ret = winInet.internetReadFile(hReq); } servername - адрес сервера (напр www.yandex.ru или ip) без http url - путь на сервере (если нужен) hdr - заголовок (зависит от сервера) data - это передаваемые данные, в вашем случае xml ret - ответ сервера res должен быть равен 1, ret зависит от того, что вернет сервер Еще зависит от того есть прокси сервер или нет. Если есть, то с ним тоже придется повозиться с параметрами |
|
![]() |
#2 |
Участник
|
Спасибо за ответы.
Цитата:
Сообщение от Lucky13
![]() X++: WinInet winInet = new WinInet(...); //internetOpen вызывается в new int hURL; int hReq; int res; str ret; if (winInet.ok()) { hURL = winInet.internetConnect(servername,80); hReq = winInet.OpenRequest(hURL, url, 'POST'); res = winInet.SendRequest(hReq, hdr, data); ret = winInet.internetReadFile(hReq); } у меня нет методов winInet.OpenRequest и winInet.SendRequest. У меня есть winInet.httpSendRequest но у него порядок аргументов другой и один аргумент отличается X++: boolean httpSendRequest(int _handler, BinData _file, int _size) { return _httpSendRequest.call(_handler, "Content-Type: application/x-www-form-urlencoded", 47, _file, _size); } Последний раз редактировалось smailik; 08.12.2014 в 10:12. |
|
![]() |
#3 |
Участник
|
Цитата:
Примерно вот так: X++: _httpOpenRequest = new DLLFunction(_winInet, 'HttpOpenRequestA'); _httpOpenRequest.returns(ExtTypes::DWord); _httpOpenRequest.arg(ExtTypes::DWORD); _httpOpenRequest.arg(ExtTypes::String); _httpOpenRequest.arg(ExtTypes::String); _httpOpenRequest.arg(ExtTypes::String); _httpOpenRequest.arg(ExtTypes::String); _httpOpenRequest.arg(ExtTypes::DWORD); _httpOpenRequest.arg(ExtTypes::DWORD); _httpOpenRequest.arg(ExtTypes::DWORD); _httpSendRequest = new DLLFunction(_winInet, 'HttpSendRequestA'); _httpSendRequest.returns(ExtTypes::DWord); _httpSendRequest.arg(ExtTypes::DWord); _httpSendRequest.arg(ExtTypes::String); _httpSendRequest.arg(ExtTypes::DWord); _httpSendRequest.arg(ExtTypes::String); _httpSendRequest.arg(ExtTypes::DWord); int OpenRequest(int hdl, str _url, str _verb = "POST", int flags = 0) { ; return _httpOpenRequest.call(hdl, _verb, _url, '', '', 0, flags, 0); } int SendRequest(int handle, str hdr, str data) { ; return _httpSendRequest.call(handle, hdr, strlen(hdr), data, strlen(data)); } Последний раз редактировалось Lucky13; 08.12.2014 в 10:37. |
|
|
За это сообщение автора поблагодарили: smailik (1). |
![]() |
#4 |
Участник
|
Цитата:
X++: strData = "url:/rest/2/authentication/createSession?account=ХХХ&login=ХХХ.dispatcher&password=ХХХ"; url = "http://review.maxoptra.com/"; if (winInetLocal.ok()) { hURL = winInetLocal.internetOpen("http://review.maxoptra.com/", 1, "ХХХ", "ХХХ", 0); // вот тут ответ число есть hURL = winInetLocal.internetConnect("http://review.maxoptra.com/", "ХХХ", "ХХХ"); // а вот тут ответ 0 hReq = winInetLocal.httpOpenRequest(hURL, url, 'POST'); res = winInetLocal.httpSendRequest(hReq, hdr, strData); // и тут все по нулям ret = winInetLocal.internetReadFile(hReq); // и тут 0 } |
|
![]() |
#5 |
Участник
|
Возможно в 2009 по другому сделано, но функции winInet от этого не меняются. internetOpen вы, скорее всего вызвали правильно, далее internetConnect. Она должна получать handle, который вернула internetOpen, так как в new она у вас не вызывается, то как он передается в internetConnect? Далее я писал:
Цитата:
servername - адрес сервера (напр www.yandex.ru или ip) без http
X++: return _internetConnect.call(hdl, serverName, port, _login, _pass, mode, 0, 0); |
|
Теги |
settimeout, webservice |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|