***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.