iOS調用WebService接口


首先有幾點說在前面

soap字符串

使用常見的AFNetworking 進行請求,請求分為兩個部分,URL和parameter,URL就是后台給你的接口,這個parameter需要填寫入一個完整的帶有參數的soap字符串。

soap字符串格式如下:

1.命名空間在根目錄上

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:前綴名(如:nsl)="webservice命名空間"> //前綴名一般是nsl,webservice命名空間找后台要 <soap:Header> //此處填寫頭內容 //有請求頭就加上,沒上就可去悼soap:Header標簽 </soap:Header> <soap:Body> <前綴名:方法名> <參數名1>參數值1</參數名1> <參數名2>參數值2</參數名2> ....... </前綴名:方法名> </soap:Body> </soap:Envelope>

下面給一個根據參數userId請求數據的例子
  • 前綴名是nsl
  • 命名空間是http://cxfServer.fh.com
NSString * soapBodyStr = [NSString stringWithFormat:@"<nsl:queryCheckList>\ <userId>%@</userId>\ </nsl:queryCheckList>",userId]; NSString *soapStr = [NSString stringWithFormat: @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\ <soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\ xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"\ //自己填寫的前綴名和命名空間 xmlns:nsl=\"http://cxfServer.fh.com/\">\ <soap:Body>\ //使用已拼接好的字符串soapBodyStr再次拼接進來 %@</soap:Body>\ </soap:Envelope>",soapBodyStr];

這樣作為參數的soap字符串就拼接好了。

2.還有一種情況是命名空間在方法名上則soap字符串格式如下:

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> //有頭內容就寫,沒有就不寫soap:Header標簽 </soap:Header> <soap:Body> <方法名 xmlns="webservice命名空間"> <參數1>參數值1</參數1> <參數2>參數值2</參數2> </方法名> </soap:Body> </soap:Envelope>

同樣使用上面的例子,則soap字符串如下:

NSString * soapBodyStr = [NSString stringWithFormat: @"<queryCheckList xmlns="http://cxfServer.fh.com/\">\ <userId>%@</userId>\ </queryCheckList>",userId]; NSString *soapStr = [NSString stringWithFormat: @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\ <soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\ xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"\ <soap:Body>\ //使用已拼接好的字符串soapBodyStr再次拼接進來 %@</soap:Body>\ </soap:Envelope>",soapBodyStr]; 

 

使用AF進行完整請求

soap字符串已經完整拼接完成,下面進行該請求數據了

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; // 設置請求超時時間 manager.requestSerializer.timeoutInterval = 60; // 返回NSData manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // 設置請求頭,也可以不設置 [manager.requestSerializer setValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [manager.requestSerializer setValue:[NSString stringWithFormat:@"%zd", soapStr.length] forHTTPHeaderField:@"Content-Length"]; // 設置HTTPBody [manager.requestSerializer setQueryStringSerializationWithBlock:^NSString *(NSURLRequest *request, NSDictionary *parameters, NSError *__autoreleasing *error) { return soapStr; }]; [manager POST:url1 parameters:soapStr success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) { // 把返回的二進制數據轉為字符串 NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; //使用自己寫的請求方法resultWithDiction進行解析 NSDictionary * dic = [self resultWithDiction:result]; //通過Block傳回數據 success(dic); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { if (failure) { NSLog(@"%@",error); failure(error); } }];

一個完整的調用WebService的請求就完成了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM