ABAP利用HTTP调用要用户验证的web service
2015-05-18 13:26
183 查看
ABAP调用web service的常用方式有两种,
一、采用proxy object调用,步骤如下:
1.sm59创建remote destination
2.sproxy创建proxy object
3.创建端口
4.代码调用
配置参见:http://saphelp.me/abap-proxy-client-server/
调用参见:http://2006057145.blog.163.com/blog/static/174722202201142810414591/
二、采用http方式调用
1.sm59创建remote destination
2.代码调用
REPORT ZWS_HTTPCLIENT_TEST.
DATA:p_client TYPE REF TO IF_HTTP_CLIENT.
DATA:p_data TYPE string.
CALL METHOD cl_http_client=>CREATE_BY_DESTINATION
EXPORTING
DESTINATION = 'TEST'
IMPORTING CLIENT = p_client
EXCEPTIONS ARGUMENT_NOT_FOUND = 1
DESTINATION_NOT_FOUND = 2
DESTINATION_NO_AUTHORITY = 3
INTERNAL_ERROR = 5.
rem 此处是传递身份认证的信息
CALL METHOD p_client->request->set_header_field
EXPORTING name = 'Username' VALUE = '3'
.
CALL METHOD p_client->request->set_header_field
EXPORTING
name = 'Password' VALUE = '1'
.
CALL METHOD p_client->request->set_header_field
EXPORTING
name = 'soapAction' VALUE = ''.
rem 此处为关键点,有些ws服务端只限制提交text/xml的请求,这与服务端的content-type定义有关
CALL METHOD p_client->request->set_header_field
EXPORTING
name = 'Content-Type' VALUE = 'text/xml'
.
rem 此处允许采用soap header方式进行验证,用户验证取决于ws服务端
CONCATENATE
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bar="http://barcode.wsservices.com.cn/">'
' <soapenv:Header>'
' <wse:CredentialSoapHeader xmlns:wse="http://handler.sws.com/">'
' <wse:Username>3</wse:Username>'
' <wse:Password>1</wse:Password>'
' </wse:CredentialSoapHeader>'
' </soapenv:Header>'
' <soapenv:Body>'
' <bar:test>'
' <Criteria>'
' <barcodeType>01</barcodeType>'
' <numbers>11</numbers>'
' </Criteria>'
' </bar:test>'
' </soapenv:Body>'
'</soapenv:Envelope>'
into p_data.
CALL METHOD p_client->request->SET_CDATA
EXPORTING DATA = p_data.
CALL METHOD cl_http_utility=>set_request_uri
EXPORTING
request = p_client->request
uri = '/WSServer/WS-Security/barcode/BarcodeService'.
CALL METHOD p_client->request->set_header_field
EXPORTING
name = '~server_protocol'
VALUE = 'HTTP/1.0'.
CALL METHOD p_client->send
EXPORTING
timeout = 30
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
http_invalid_timeout = 4
OTHERS = 5.
CALL METHOD p_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
CALL METHOD p_client->response->GET_CDATA
receiving DATA = p_data.
CALL METHOD p_client->close.
WRITE : p_data.
调用参见:http://wenku.baidu.com/view/ab3fd83e5727a5e9856a6170.html
一、采用proxy object调用,步骤如下:
1.sm59创建remote destination
2.sproxy创建proxy object
3.创建端口
4.代码调用
配置参见:http://saphelp.me/abap-proxy-client-server/
调用参见:http://2006057145.blog.163.com/blog/static/174722202201142810414591/
二、采用http方式调用
1.sm59创建remote destination
2.代码调用
REPORT ZWS_HTTPCLIENT_TEST.
DATA:p_client TYPE REF TO IF_HTTP_CLIENT.
DATA:p_data TYPE string.
CALL METHOD cl_http_client=>CREATE_BY_DESTINATION
EXPORTING
DESTINATION = 'TEST'
IMPORTING CLIENT = p_client
EXCEPTIONS ARGUMENT_NOT_FOUND = 1
DESTINATION_NOT_FOUND = 2
DESTINATION_NO_AUTHORITY = 3
INTERNAL_ERROR = 5.
rem 此处是传递身份认证的信息
CALL METHOD p_client->request->set_header_field
EXPORTING name = 'Username' VALUE = '3'
.
CALL METHOD p_client->request->set_header_field
EXPORTING
name = 'Password' VALUE = '1'
.
CALL METHOD p_client->request->set_header_field
EXPORTING
name = 'soapAction' VALUE = ''.
rem 此处为关键点,有些ws服务端只限制提交text/xml的请求,这与服务端的content-type定义有关
CALL METHOD p_client->request->set_header_field
EXPORTING
name = 'Content-Type' VALUE = 'text/xml'
.
rem 此处允许采用soap header方式进行验证,用户验证取决于ws服务端
CONCATENATE
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bar="http://barcode.wsservices.com.cn/">'
' <soapenv:Header>'
' <wse:CredentialSoapHeader xmlns:wse="http://handler.sws.com/">'
' <wse:Username>3</wse:Username>'
' <wse:Password>1</wse:Password>'
' </wse:CredentialSoapHeader>'
' </soapenv:Header>'
' <soapenv:Body>'
' <bar:test>'
' <Criteria>'
' <barcodeType>01</barcodeType>'
' <numbers>11</numbers>'
' </Criteria>'
' </bar:test>'
' </soapenv:Body>'
'</soapenv:Envelope>'
into p_data.
CALL METHOD p_client->request->SET_CDATA
EXPORTING DATA = p_data.
CALL METHOD cl_http_utility=>set_request_uri
EXPORTING
request = p_client->request
uri = '/WSServer/WS-Security/barcode/BarcodeService'.
CALL METHOD p_client->request->set_header_field
EXPORTING
name = '~server_protocol'
VALUE = 'HTTP/1.0'.
CALL METHOD p_client->send
EXPORTING
timeout = 30
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
http_invalid_timeout = 4
OTHERS = 5.
CALL METHOD p_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
CALL METHOD p_client->response->GET_CDATA
receiving DATA = p_data.
CALL METHOD p_client->close.
WRITE : p_data.
调用参见:http://wenku.baidu.com/view/ab3fd83e5727a5e9856a6170.html
相关文章推荐
- java应用中利用Domino提供的Web Service验证用户
- 利用SoapHeader验证web service调用的合法性
- 4.2用户登陆和安全验证(利用HttpModule集中处理身份检查)
- 利用SoapHeader验证web service调用的合法性
- 利用SoapHeader验证web service调用的合法性(dwonmoon)
- 利用SoapHeader验证web service调用的合法性
- CXF发布webService、tomcat用户验证、axis2(http/https)调用服务
- 利用SoapHeader验证web service调用的合法性(dwonmoon)
- VB.NET,C#.NET调用Web Service,利用visual studio 的实现方法
- MVC中利用Filter验证用户登录状态
- 在.net 2.0环境下开发的web service ,支持http get方式的调用
- 【IOS】利用ASIHTTPRequest 实现一个简单的登陆验证
- [Java] 利用Axis库调用C#的Web Service
- Java调用weka.jar利用交叉验证方法进行分类
- 利用Python的装饰器解决Bottle框架中用户验证问题
- nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证
- 利用prepareCall加速调用SQL【转自http://blog.sina.com.cn/u/1883416257 】
- 实现带有用户身份验证的文件传输Web Service(1)
- Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
- abap 调用外部web service 使用小结