ios SoapService请求

来源:互联网 发布:p城堡垒优化助手 编辑:程序博客网 时间:2024/04/30 07:46

步骤

     1:利用SoapUI或者火狐自带插件看服务器端给出的xml 格式

     2:根据xml格式拼写soapString

     3: soapBody 格式说明

             <web:方法名 xmls= “命名空间”>

            <参数名>参数值</参数名>

            </web: 方法名>

       4:请求soap

例子

 NSString *soapBody = [NSString stringWithFormat:
                          @"<web:addInformation xmlns=\"命名空间\">"
                          "<sign>参数值</sign>"
                          "<secretKey>参数值</secretKey>"
                          "<jsonString>%@</jsonString>"
                          "</web:addInformation>",参数值];//参数
    [self SOAPData:@"服务器端地址" soapBody:soapBody success:^(id responseObject) {
        success(responseObject);
    } failure:^(NSError *error) {
        failure(error.debugDescription);
    }];

+ (void)SOAPData:(NSString *)url soapBody:(NSString *)soapBody success:(void (^)(id responseObject))success failure:(void(^)(NSError *error))failure {
    NSString *soapStr = [NSString stringWithFormat:
                         @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
                         "<soap:Envelope xmlns:web=\"命名空间" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
                         "<soap:Body>\n"
                         "%@\n"
                         "</soap:Body>\n"
                         "</soap:Envelope>",
                         soapBody];
    NSURL *urlString = [NSURL URLWithString:url];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlString];
    
    NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapStr length]];
    
    [request addValue:@"命名空间/方法名" forHTTPHeaderField:@"SOAPAction"];
    [request addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request addValue: msgLength forHTTPHeaderField:@"Content-Length"];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody: [soapStr dataUsingEncoding:NSUTF8StringEncoding]];
    
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    operation.responseSerializer = [AFXMLParserResponseSerializer serializer];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
          success(responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        failure(error);
    }];
    [operation start];
}

格式基本是一样,主要soapBody内细微的地方不好调通!要有一个强大的后端把格式直接给你 ,那就完美了!!

        





0 0
原创粉丝点击