美文网首页iOS Developer
基于 SOAP1.2(简单对象访问协议)进行网络请求

基于 SOAP1.2(简单对象访问协议)进行网络请求

作者: EagleOne | 来源:发表于2016-12-03 16:41 被阅读1076次

什么是 SOAP(Simple Object Access Protocol)

简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

 AFHTTPSessionManager *manager =  [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
 
    //因为返回的不是标准的 XML 或者 JSON 格式,所以用 AFHTTPRequestSerializer
    AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];
    manager.requestSerializer = serializer;
    
    //缓存策略
    serializer.cachePolicy = NSURLRequestUseProtocolCachePolicy;
    serializer.timeoutInterval = 30.0f;
    
    //设置请求头
    [serializer setValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [serializer setValue:@"application/soap+xml" forHTTPHeaderField:@"Accept"];
   
   //SOAP协议采用 的类似这样的请求体,这个即是下面的 SOAP 消息
   // <?xml version="1.0" encoding="utf-8"?>
//  <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
//    <soap12:Body>
//    <E_GetUserInfo xmlns="http://tempuri.org/">
//    <CardNo>H13932169</CardNo>
//    </E_GetUserInfo>
//    </soap12:Body>
//    </soap12:Envelope>

    NSString* msgLength = [NSString stringWithFormat:@"%lu",soapRequestConfigureModel.SOAPMsg.length];
    
    //请求的内容长度
    [serializer setValue:msgLength forHTTPHeaderField:@"Content-Length"];
    //指定请求的服务器的域名和端口号
    [serializer setValue:@"221.224.118.58" forHTTPHeaderField:@"Host"];
    //自定义请求体 HTTPBody 这步是必须的
    [manager.requestSerializer setQueryStringSerializationWithBlock:^NSString * _Nonnull(NSURLRequest * _Nonnull request, id  _Nonnull parameters, NSError * _Nullable __autoreleasing * _Nullable error) {
        return soapRequestConfigureModel.soapMsg;
    }];

    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    //参数传 SOAPMsg
     [manager POST:BaseURL parameters:SOAPMsg progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
    }];

构建模块

  • 一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:
  • 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
  • 可选的 Header 元素,包含头部信息
  • 必需的 Body 元素,包含所有的调用和响应信息
  • 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息

语法规则

  • 这里是一些重要的语法规则:
  • SOAP 消息必须用 XML 来编码
  • SOAP 消息必须使用 SOAP Envelope 命名空间
  • SOAP 消息必须使用 SOAP Encoding 命名空间
  • SOAP 消息不能包含 DTD 引用
  • SOAP 消息不能包含 XML 处理指令

消息基本结构

<?xml
 version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
 
<soap:Header>
</soap:Header>

<soap:Body>
<soap:Fault>
</soap:Fault>
</soap:Body>

</soap:Envelope>
 <?xml version="1.0" encoding="utf-8"?>
   <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
    <soap12:Body>
    //命令以及包含的参数
    <E_GetUserInfo xmlns="http://tempuri.org/">
    <CardNo>H13932169</CardNo>
    </E_GetUserInfo>
    
    </soap12:Body>
    </soap12:Envelope>

相关文章

  • 基于 SOAP1.2(简单对象访问协议)进行网络请求

    什么是 SOAP(Simple Object Access Protocol) 简单对象访问协议是交换数据的一种协...

  • Soap WebService

    SOAP协议简介SOAP 指简单对象访问协议,它是一种基于XML的消息通讯格式,用于网络上,不同平台,不同语言的应...

  • 网络协议学习

    Http、TCP、UDP 、Socket 简述 HTTP协议:简单对象访问协议,对应于应用层 ,HTTP协议是基于...

  • socket连接和http连接的区别

    首先一定要明白: HTTP协议:简单对象访问协议,对应于应用层 ,HTTP协议是基于TCP连接的 tcp协议: ...

  • Android WebService请求

    本篇文章不涉及更深的知识,知识帮助你调用WebService 1:Webserver它的请求协议Soap1.2协议...

  • socket连接和http连接的区别

    socket连接和http连接的区别HTTP协议:简单对象访问协议,对应于应用层 ,HTTP协议是基于TCP连接...

  • 问题:Scoket连接和HTTP连接的区别

    Scoket连接和HTTP连接的区别 HTTP协议:简单对象访问协议,对应于应用层 ,HTTP协议是基于TCP连接...

  • socket简单理解

    socket:底层网络通信对象,又称"套接字",向网络发出请求或向网络做出回应. Http协议是基于socket,...

  • ios http和scoket通信的区别

    HTTP协议:简单对象访问协议,对应于应用层 ,HTTP协议是基于TCP连接的 tcp协议: 对应于传输层 ip协...

  • requests - get

    Get 方法 Requests 发送网络请求非常简单 直接get 访问URL地址 请求后返回response对象 ...

网友评论

    本文标题:基于 SOAP1.2(简单对象访问协议)进行网络请求

    本文链接:https://www.haomeiwen.com/subject/klecmttx.html