У меня серьезная проблема с правильным методом GET, вызывающим open.mapquestapi.com для получения данных геолокации.
Мой код довольно стандартный, в основном взят из Progress KB и других сайтов.
DEFINE VARIABLE vcHost AS CHARACTER INITIAL "open.mapquestapi.com" NO-UNDO.
DEFINE VARIABLE vcPort AS CHARACTER INITIAL "80" NO-UNDO.
DEFINE VARIABLE vhSocket AS HANDLE NO-UNDO.
CREATE SOCKET vhSocket.
vhSocket:CONNECT('-H ' + vcHost + ' -S 80')NO-ERROR.
IF vhSocket:CONNECTED() = FALSE THEN
DO:
MESSAGE "Connection failure" VIEW-AS ALERT-BOX.
MESSAGE ERROR-STATUS:GET-MESSAGE(1) VIEW-AS ALERT-BOX.
RETURN.
END.
ELSE
MESSAGE "Connect"
VIEW-AS ALERT-BOX.
Эта часть кода возвращает сообщение «Подключиться», поэтому я считаю, что я правильно подключен.
Следующая часть:
vhSocket:SET-READ-RESPONSE-PROCEDURE('getResponse').
RUN GetRequest.
WAIT-FOR READ-RESPONSE OF vhSocket.
vhSocket:DISCONNECT() NO-ERROR.
DELETE OBJECT vhSocket.
QUIT.
PROCEDURE GetRequest:
DEFINE VARIABLE vcRequest AS CHARACTER.
DEFINE VARIABLE mRequest AS MEMPTR.
vcRequest = 'GET ' +
'/nominatim/v1' +
'/search.php?key=WLrMQcGao56Cb5m4ulmwZZDOegO3BkZn&format=xml&q=warszawa chałubińskiego 8&addressdetails=1&limit=50' +
" ~r~n HTTP/1.1 ~r~n" +
"~r~nConnection: close~r~n~r~n".
MESSAGE vcREquest
VIEW-AS ALERT-BOX.
SET-SIZE(mRequest) = 0.
SET-SIZE(mRequest) = LENGTH(vcRequest) + 1.
SET-BYTE-ORDER(mRequest) = BIG-ENDIAN.
PUT-STRING(mRequest,1) = vcRequest .
vhSocket:WRITE(mRequest, 1, LENGTH(vcRequest)).
END PROCEDURE.
PROCEDURE getResponse:
DEFINE VARIABLE vcWebResp AS CHARACTER NO-UNDO.
DEFINE VARIABLE lSucess AS LOGICAL NO-UNDO.
DEFINE VARIABLE mResponse AS MEMPTR NO-UNDO.
IF vhSocket:CONNECTED() = FALSE THEN
do:
MESSAGE 'Not Connected' VIEW-AS ALERT-BOX.
RETURN.
END.
lSucess = TRUE.
DO WHILE vhSocket:GET-BYTES-AVAILABLE() > 0:
SET-SIZE(mResponse) = vhSocket:GET-BYTES-AVAILABLE() + 1.
SET-BYTE-ORDER(mResponse) = BIG-ENDIAN.
vhSocket:READ(mResponse,1,1,vhSocket:GET-BYTES-AVAILABLE()).
vcWebResp = vcWebResp + GET-STRING(mResponse,1).
END.
message vcWebResp view-as alert-box.
END.
Resposne с веб-сервера:
HTTP / 1.1 400 BAD_REQUEST
Длина контента: 0
Соединение: Закрыть
Как видите, большая часть кода взята из документов и примеров Progress, найденных в Интернете. Я пытался изменить мой запрос GET различными способами, но безуспешно. Я также попробовал какой-то другой код, но я думаю, что это руководство для правильного решения. Ожидаемый результат должен быть таким, как на этом сайте: Запрос географического местоположения . Краткая документация по этому API может быть найдена ЗДЕСЬ .
Этот код будет работать на сервере UNIX, поэтому я не могу использовать библиотеки .NET.
Любая помощь будет оценена.
EDIT:
ПОЖАЛУЙСТА, ПОМНИТЕ, ЧТО ХАШ-ЗНАЧЕНИЕ, ПОКАЗАННОЕ В КЛЮЧЕВОМ ПАРАМЕТРЕ, БУДЕТ УДАЛЕНО ОЧЕНЬ СКОРО! ВЫ ДОЛЖНЫ СОЗДАТЬ СВОЙ КЛЮЧ БЕСПЛАТНО НА business.mapquest.com.