Общий метод SAP ABAP для отправки/вызова HTTP-запросов POST/GET
Общий метод SAP ABAP для отправки/вызова HTTP-запросов POST/GET

Использование класса if_http_client может решить большинство проблем, связанных с вызовом http-сервисов ABAP. Перед вызовом службы вы можете использовать почтальон, чтобы протестировать службу и определить параметры, которые можно ввести.

Общий код выглядит следующим образом:

Язык кода:javascript
копировать
report  z_http_post.

" data to post
data: gt_accbal like standard table of zglaccbalance with header line.
data: lv_json_str type string. «Отправить сообщение
data: gr_serializer type ref to zcl_trex_json_serializer.

start-of-selection.
  " get data
  call function 'Z_BAPI_GLACCPERIODBALANCES'
    exporting
      companycode  = 'Z900'
      fiscalyear   = '2020'
      fiscalperiod = '10'
    tables
      acc_balances = gt_accbal.

  " сериализация
  create object gr_serializer
    exporting
      data   = gt_accbal[] .
  call method gr_serializer->serialize( ) .
  lv_json_str = gr_serializer->get_data( ).

  " отправить http отправить запрос
  perform http_post.


*&---------------------------------------------------------------------*
*&      Form  HTTP_POST
*&---------------------------------------------------------------------*
form http_post .
  data: lv_url type string.     "http Адрес сервисного интерфейса
  data: lo_http_client  type ref to if_http_client.
  data: lv_len type i.«Отправить сообщениедлина
  data: lv_resp type string.

  data: lv_message  type string.
  data: lv_mtype    type bapi_mtype.
  data: lv_code     type sysubrc.

  " Установить адрес http-интерфейса
  lv_url = 'http://192.168.3.14:5000/testpost/'.

  «Создать клиентский запрос
  call method cl_http_client=>create_by_url
    exporting
      url                = lv_url
    importing
      client             = lo_http_client
    exceptions
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      others             = 4.
  if sy-subrc <> 0.
    "lv_subrc = sy-subrc.
    message id sy-msgid type sy-msgty number sy-msgno with
               sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    exit.
  endif.

  " Установить контент типиперсонаж set
  lo_http_client->request->set_content_type( content_type = 'application/json; charset=utf-8' ).

  " Метод настройки post
  lo_http_client->request->set_method( if_http_request=>co_request_method_post ).

  " Установить контент для передачи
  lv_len = strlen( lv_json_str ).
  call method lo_http_client->request->set_cdata
    exporting
      data   = lv_json_str
      offset = 0
      length =  lv_len .

  " Отправить запрос
  lo_http_client->send(  exceptions http_communication_failure = 1
                                    http_invalid_state         = 2 ).

  if sy-subrc <> 0.
    «Операция не удалась, узнайте причину неудачи»
    lo_http_client->get_last_error( importing message = lv_message code = lv_code ).
    lv_mtype = 'E'.
    exit.
  endif.

  " Прочтите сообщение о результате, возвращенное удаленной службой.
  lo_http_client->receive( exceptions http_communication_failure = 1
                                      http_invalid_state         = 2
                                      http_processing_failed     = 3 ).

  if sy-subrc <> 0 .
    " lv_subrc = sy-subrc.
    lo_http_client->get_last_error( importing message = lv_message code = lv_code  ).
    lv_mtype = 'E'.
    write: lv_message, lv_code.
    exit.
  else.
    " Прочитать возврат-возврат
    clear lv_resp.
    lv_resp = lo_http_client->response->get_cdata( ).
  endif.
  write:lv_resp.
*  MESSAGE LV_MESSAGE TYPE LV_MTYPE .
endform.                    "HTTP_POST

Приведите другой пример

Возьмем метод post в качестве примера.,Параметры запроса передаются через тело. Обычный запуск службы относительно прост.,проходитьif_http_client->request->set_dataнастраивать传输值,if_http_client->request->set_header_fieldнастраиватьheaderизcontent-type。Если серверbodyиз数据字符集有要求,Такие как ГБК,Сначала вам нужно перекодировать данные тела jbk.,затем вif_http_client->request->set_content_typeсередина Установить контент-type,Пример кода выглядит следующим образом:

Язык кода:javascript
копировать
  «Установите формат содержимого запроса на передачу и формат кодирования
  lo_http_client->request->set_content_type( content_type = 'application/XML; charset=GBK' ).

  «Установить услугу вызова
  lo_http_client->request->set_method( if_http_request=>co_request_method_post ).

  CLEAR:lv_result_xstring.
  lv_result_xstring = cl_abap_codepage=>convert_to(
        source      =  uv_reqxml
        codepage    = 'GBK'
                          ).
  lv_len = xstrlen( lv_result_xstring ).
  lo_http_client->request->set_data(
     EXPORTING
       data   = lv_result_xstring
       offset = 0
       length = lv_len ).


  lo_http_client->send(
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2 ).

  lo_http_client->receive(
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3 ).


*  lv_result_string = lo_http_client->response->get_cdata( ).

  CLEAR:lv_result_xstring,lv_result_string.
  lv_result_xstring = lo_http_client->response->get_data( ).
  lv_result_string  = cl_abap_codepage=>convert_from(
        source      =  lv_result_xstring
        codepage    = 'GBK' ).
boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.