iOS開發(fā)中 xml 數(shù)據(jù)請求

一庵朝、用URLSession請求

NSString *soapStr = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\

<soap:Envelope xmlns:xsi = \"htttp://www.網(wǎng)址.com"\

xmlns:soap = \"http://網(wǎng)址\">\

<soap:header>\

</soap:header>\

<soap:Body>\

// 這中間基本就是要寫的參數(shù),在Body 之間就是參數(shù)

</soap:Body>\

</soap:Envelope>"];?

NSURL *url=[NSURL URLWithString:@"你自己wsdl文檔中對應(yīng)的endpoint address"];

NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];

// 訪問方式[request setHTTPMethod:@"POST"];

// 設(shè)置請求頭(請求頭也可以不設(shè)置长已,前兩個設(shè)不設(shè)置都一樣乾吻,應(yīng)該默認的,但是SOAPAction我怎么都設(shè)置不對,不設(shè)置也可以快压,干脆不設(shè)置了)

// [request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];//? [request addValue:[NSString stringWithFormat:@"%zd", soapStr.length] forHTTPHeaderField:@"Content-Length"];

//? ? [request addValue:@"nameSpace/methodName" forHTTPHeaderField:@"SOAPAction"];

// body內(nèi)容 [request setHTTPBody:[soapStr dataUsingEncoding:NSUTF8StringEncoding]];

NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

NSString *result = [[NSString alloc] initWithData:data? encoding:NSUTF8StringEncoding];

NSLog(@"進入成功回調(diào)Session-----結(jié)果:%@----請求地址:%@", result, response.URL);

if (error) {

NSLog(@"Session----失敗----%@", error.localizedDescription);

}

}];

[task resume];



二、用AFNetworking請求

// 傳入一個字典只有唯一(key - value)的數(shù)組垃瞧,

// eg: NSArray *array = @[@{@"addr":@"777"},@{@"999":@"666"},@{@"000":@"111"}];

+ (NSString*)convertDicArrayToXML:(NSArray*)arrayandElement:(NSString*)element {

? ? if(array.count<=0) {

?? ? return nil;

? ? }

? ? NSMutableString *mString = [NSMutableString string];

? ? [mStringappendFormat:@"<%@ xmlns=\"http://tempuri.org/\">",element];

? ? for(NSDictionary*dicinarray) {

? ? ? ? [mStringappendFormat:@"<%@>", dic.allKeys.firstObject];

? ? ? ? [mStringappendFormat:@"%@", dic.allValues.firstObject];

? ? ? ? [mStringappendFormat:@"</%@>\t\t", dic.allKeys.firstObject];

? ? }

? ? [mStringappendFormat:@"</%@>", element];

? ? returnmString;

}

+ (void)xmlRequestPOSTWithSoapBody:(NSString*)bodyStringandElement:(NSString*)elementsuccess:(void(^)(idresponseObject))successfailure:(void(^)(NSError*error))failure {

//? ? DLog(@"....bodyString = %@", bodyString);

? ? 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>%@</soap:Body>\

</soap:Envelope>",bodyString];

? ? AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

? ? manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

? ? // 設(shè)置請求超時時間

? ? manager.requestSerializer.timeoutInterval = 15;

? ? // 返回NSData

? ? manager.responseSerializer = [AFHTTPResponseSerializer serializer];

? ? // 設(shè)置請求頭蔫劣,也可以不設(shè)置

? ? [manager.requestSerializer setValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

? ? [manager.requestSerializer setValue:[NSString stringWithFormat:@"%zd", soapStr.length] forHTTPHeaderField:@"Content-Length"];

? ? [manager.requestSerializer setValue:[NSString stringWithFormat:@"http://tempuri.org/%@",element] forHTTPHeaderField:@"SOAPAction"];


? ? // 設(shè)置HTTPBody

? ? [manager.requestSerializersetQueryStringSerializationWithBlock:^NSString*(NSURLRequest*request,NSDictionary*parameters,NSError*__autoreleasing*error) {

? ? ? ? returnsoapStr;

? ? }];

? ? [managerPOST:webService_Urlparameters:soapStrprogress:^(NSProgress*_NonnulluploadProgress) {

? ? }success:^(NSURLSessionDataTask*_Nonnulltask,id? _NullableresponseObject) {

? ? ? ? //DLog(@"responseObject = %@", responseObject);

? ? ? ? // 把返回的二進制數(shù)據(jù)轉(zhuǎn)為字符串

? ? ? ? NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

?? ? ? // DLog(@"result = %@", result);

? ? ? ? // 利用正則表達式取出之間的字符串

? ? ? ? NSString*resultString = [NSStringstringWithFormat:@"(?<=%@Result\\>).*(?=</%@Result)",element,element];//@"(?<=return\\>).*(?=</return)"

? ? ? ? NSRegularExpression *regular = [[NSRegularExpression alloc] initWithPattern:resultString? options:NSRegularExpressionCaseInsensitive error:nil];

? ? ? ? NSDictionary *dict = [NSDictionary dictionary]; ? ??for(NSTextCheckingResult*checkingResultin[regularmatchesInString:resultoptions:0range:NSMakeRange(0, result.length)]) {

? ? ? ? ? ? // 得到字典

? ? ? ? ? ? dict = [NSJSONSerialization JSONObjectWithData:[[result substringWithRange:checkingResult.range] dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableLeaves error:nil];

? ? ? ? }

? ? ? ? if(success) {

? ? ? ? ? ? success(dict);

? ? ? ? }

?? ? ? // DLog(@"dic = %@", dict);

? ? }failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {

? ? ? ? DLog(@"error = %@", error);

? ? ? ? if(failure) {

? ? ? ? ? ? failure(error);

? ? ? ? }

? ? }];

}

調(diào)用一下:

+ (void)mallListWithType:(NSString *_Nullable)type

?? ? ? ? ? ? ? ? success:(void(^_Nullable)(id_NullableresponseObject))success

?? ? ? ? ? ? ? ? failure:(void(^_Nullable)(NSString*_NullablestrError))failure {

? ? NSString *element = @"ZHWS_GetActivityMallAdList";

? ? NSArray*bodyArray =@[

? ? ? ? @{@"Type":type}

? ? ];

? ? NSString*bodyString = [selfconvertDicArrayToXML:bodyArrayandElement:element];

? ? [selfxmlRequestPOSTWithSoapBody:bodyStringandElement:elementsuccess:^(idresponseObject) {

? ? ? ? DLog(@"... 活動相關(guān)、商場廣告皆警、廣告列表 = %@", responseObject);

? ? ? ? if(responseObject) {

? ? ? ? ? ? success(responseObject);

? ? ? ? }

? ? }failure:^(NSError*error) {

? ? ? ? if(error) {

? ? ? ? ? ? //failure(error.mj_JSONString);

? ? ? ? }

? ? }];

}

近期項目剛好用到這個拦宣,之前也沒有用過,所以順手就記錄一下信姓。如有錯誤鸵隧,看到的小伙伴請指正。

參考鏈接:https://blog.csdn.net/djh996064549/article/details/79635551

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末意推,一起剝皮案震驚了整個濱河市豆瘫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌菊值,老刑警劉巖外驱,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件育灸,死亡現(xiàn)場離奇詭異,居然都是意外死亡昵宇,警方通過查閱死者的電腦和手機磅崭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓦哎,“玉大人砸喻,你說我怎么就攤上這事〗” “怎么了割岛?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長犯助。 經(jīng)常有香客問我癣漆,道長,這世上最難降的妖魔是什么剂买? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任惠爽,我火速辦了婚禮,結(jié)果婚禮上瞬哼,老公的妹妹穿的比我還像新娘疆股。我一直安慰自己,他們只是感情好倒槐,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布旬痹。 她就那樣靜靜地躺著,像睡著了一般讨越。 火紅的嫁衣襯著肌膚如雪两残。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天把跨,我揣著相機與錄音人弓,去河邊找鬼。 笑死着逐,一個胖子當著我的面吹牛崔赌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耸别,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼健芭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了秀姐?” 一聲冷哼從身側(cè)響起慈迈,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎省有,沒想到半個月后痒留,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谴麦,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年伸头,在試婚紗的時候發(fā)現(xiàn)自己被綠了匾效。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡恤磷,死狀恐怖弧轧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碗殷,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布速缨,位于F島的核電站锌妻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏旬牲。R本人自食惡果不足惜仿粹,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望原茅。 院中可真熱鬧吭历,春花似錦、人聲如沸擂橘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽通贞。三九已至朗若,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昌罩,已是汗流浹背哭懈。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茎用,地道東北人遣总。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像轨功,于是被迫代替她去往敵國和親旭斥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345