cl_http_utility не нормализует мой URL. Зачем? - PullRequest
0 голосов
/ 06 сентября 2018

Через пользователя корпоративного сервиса я подключаюсь к веб-сервису, который возвращает мне некоторые данные, а также URL-адреса.

Тем не менее, я попробовал все методы упомянутого выше класса, и НИКАКОЙ МЕТОД, кажется, не преобразует символы Юникода в моем URL в правильные читаемые символы .... (в данном случае '=' и ';') .. .

Единственный метод, который работает правильно - это is_valid_url, который возвращает false, когда я передаю URL-адрес следующим образом:

http://not_publish-workflow-dev.hq.not_publish.com/lc/content/forms/af/not_publish/request-datson-internal/v01/request-datson-internal.html?taskId\u003d105862\u0026wcmmode\u003ddisabled

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Я не хочу отвечать на свои вопросы, но в любом случае я нашел собственное решение, вручную заменив эти юникоды. Это похоже на идею Сандры, но может конвертировать ЛЮБОЙ юникод.

Я делюсь этим здесь, на всякий случай, это может понадобиться любому человеку.

  DATA: lt_res_tab TYPE  match_result_tab.
  DATA(valid_url) = url.

  FIND ALL OCCURRENCES OF REGEX '\\u.{4}' IN valid_url RESULTS lt_res_tab.

  WHILE lines( lt_res_tab )  > 0.

    DATA(match) = substring( val = valid_url off = lt_res_tab[ 1 ]-offset len = lt_res_tab[ 1 ]-length ).
    DATA(hex_unicode) = to_upper( match+2 ).
    DATA(char) = cl_abap_conv_in_ce=>uccp( uccp = hex_unicode ).

    valid_url = replace( val = valid_url off = lt_res_tab[ 1 ]-offset len = lt_res_tab[ 1 ]-length with = char ).

    FIND ALL OCCURRENCES OF REGEX '\\u.{4}' IN valid_url RESULTS lt_res_tab.

  ENDWHILE.


  WRITE / url.
  WRITE / valid_url.
0 голосов
/ 06 сентября 2018

Кажется, что этот формат для значений JSON. Обычно = и & не нужно писать с префиксом \u. Для декодирования всех \u символов вы можете использовать этот код:

DATA(json_value) = `http://not_publish-workflow-dev.hq.not_publish.com/lc`
                && `/content/forms/af/not_publish/request-datson-internal/v01`
                && `/request-datson-internal.html?taskId\u003d105862\u0026wcmmode\u003ddisabled`.

FIND ALL OCCURRENCES OF REGEX '\\u....' IN json_value RESULTS DATA(matches).
SORT matches BY offset DESCENDING.
LOOP AT matches ASSIGNING FIELD-SYMBOL(<match>).
  DATA hex2 TYPE x LENGTH 2.
  hex2 = to_upper( substring( val = json_value+<match>-offset(<match>-length) off = 2 ) ).
  DATA(uchar) = cl_abap_conv_in_ce=>uccp( hex2 ).
  REPLACE SECTION OFFSET <match>-offset LENGTH <match>-length OF json_value WITH uchar.
ENDLOOP.

ASSERT json_value = `http://not_publish-workflow-dev.hq.not_publish.com/lc`
                && `/content/forms/af/not_publish/request-datson-internal/v01`
                && `/request-datson-internal.html?taskId=105862&wcmmode=disabled`.
...