【转载】CL_HTTP_CLIENT的HTTP和SOAP用法示例

***SOAP方式调用WebService

REPORT  z_barry_http_soap_post LINE-SIZE 1023.

DATA: http_client TYPE REF TO if_http_client .
DATA: proxy_host TYPE string VALUE '10.99.60.203' ,
      proxy_port TYPE string VALUE '8080',
      proxy_user TYPE string ,
      proxy_pass TYPE string .
DATA: len TYPE i,
      len_str TYPE string  .
DATA: post_string TYPE string ,
      return_str TYPE string .

PARAMETERS: p_code(11) TYPE c OBLIGATORY DEFAULT '1381852'.
PARAMETERS: p_user(20) TYPE c .

START-OF-SELECTION .

  CONCATENATE ''
  'http://www.w3.org/2001/XMLSchema-instance"'
  ' xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
  ' xmlns:soap="'">http://schemas.xmlsoap.org/soap/envelope/">'
  ''
  ''">http://WebXml.com.cn/">'
  '' p_code ''
  '' p_user ''
  ''
  ''
  ''
  INTO post_string .

  len = STRLEN( post_string ) .
  len_str = len .

  CALL METHOD cl_http_client=>create
    EXPORTING
      host          = 'webservice.webxml.com.cn'
      service       = '80'
      scheme        = '1'
*      proxy_host    = proxy_host
*      proxy_service = proxy_port
    IMPORTING
      client        = http_client.

  http_client->propertytype_logon_popup = http_client->co_disabled.

*  CALL METHOD http_client->authenticate
*    EXPORTING
*      proxy_authentication = 'X'
*      username             = proxy_user
*      password             = proxy_pass.

  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = '~request_method'
      value = 'POST'.

  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = '~server_protocol'
      value = 'HTTP/1.1'.

  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = '~request_uri'
      value = '/WebServices/MobileCodeWS.asmx'.

  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = 'Content-Type'
      value = 'text/xml; charset=utf-8'.

  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = 'Content-Length'
      value = len_str.

  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = 'SOAPAction'
      value = 'http://WebXml.com.cn/getMobileCodeInfo'.

  CALL METHOD http_client->request->set_cdata
    EXPORTING
      data   = post_string
      offset = 0
      length = len.

  CALL METHOD http_client->send
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2.

  CALL METHOD http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3.

  CLEAR return_str .

  return_str = http_client->response->get_cdata( ).

  DATA : xstr TYPE xstring ,
         str TYPE string ,
         bin_tab TYPE STANDARD TABLE OF x255  ,
         bin_len TYPE i.
  xstr = http_client->response->get_data( ).

  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer        = xstr
    IMPORTING
      output_length = bin_len
    TABLES
      binary_tab    = bin_tab.

  CALL FUNCTION 'SCMS_BINARY_TO_STRING'
    EXPORTING
      input_length = bin_len
      mimetype     = '"text/html; charset=utf-8"'
    IMPORTING
      text_buffer  = str
    TABLES
      binary_tab   = bin_tab.

  CALL METHOD http_client->close.
  WRITE return_str .
  WRITE / str.

 

***HTTP POST 方法

REPORT  z_barry_http_post LINE-SIZE 1023.

 

DATA: http_client TYPE REF TO if_http_client .
DATA: proxy_host TYPE string VALUE '10.99.60.203' ,
      proxy_port TYPE string VALUE '8080',
      proxy_user TYPE string ,
      proxy_pass TYPE string .
DATA: len TYPE i,
      len_str TYPE string  .
DATA: post_string TYPE string ,
      return_str TYPE string .

 

PARAMETERS: p_code(11) TYPE c OBLIGATORY DEFAULT '1381852'.
PARAMETERS: p_user(20) TYPE c .

 

START-OF-SELECTION .
  CONCATENATE 'mobileCode=' p_code '&userID=' p_user INTO post_string.

  len = STRLEN( post_string ) .
  len_str = len .

 

  CALL METHOD cl_http_client=>create
    EXPORTING
      host          = 'webservice.webxml.com.cn'
      service       = '80'
      scheme        = '1'
      proxy_host    = proxy_host
      proxy_service = proxy_port
    IMPORTING
      client        = http_client.

  http_client->propertytype_logon_popup = http_client->co_enabled .

 

*  CALL METHOD http_client->authenticate
*    EXPORTING
*      proxy_authentication = 'X'
*      username             = proxy_user
*      password             = proxy_pass.

 

  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = '~request_method'
      value = 'POST'.

  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = '~server_protocol'
      value = 'HTTP/1.1'.

  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = '~request_uri'
      value = '/WebServices/MobileCodeWS.asmx/getMobileCodeInfo'.

  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = 'Content-Type'
      value = 'application/x-www-form-urlencoded'.

  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = 'Content-Length'
      value = len_str.

  CALL METHOD http_client->request->set_cdata
    EXPORTING
      data   = post_string
      offset = 0
      length = len.

  CALL METHOD http_client->send
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2.

  CALL METHOD http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3.

 

  return_str = http_client->response->get_cdata( ).

 

  CALL METHOD http_client->close.

 

  WRITE return_str.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值