ios网络请求

2021-09-18  本文已影响0人  一个好笑的人

写在前面

Web Service (SOAP)和HTTP接口的区别

目录

1.Web Service

20多个常用的免费WebService接口

每个WebService会有调用参数文档,有demo

2.NSURLSession API

2.1 Overview

2.1.1 主要类有:

2.1.2 主要协议有:

2.1.3 会话形式:

2.2 简单会话实现GET请求

NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
/*这个Webservice是Json格式的*/
NSString *appkey = @"bf1d95bd730f031fb019ba80ffabb89d";
NSString *baseURL = @"http://op.juhe.cn/onebox/weather/query";
NSString *url = [baseURL stringByAppendingString:[NSString stringWithFormat:@"?cityname=%@&dtype=&key=%@", @"上海", appkey]];
NSString *urlStr = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];//把中文部分转码和谐掉

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];//建立请求对象 
NSURLSession *session = [NSURLSession sharedSession];//创建一个简单会话对象(简单对话默认在非主队列执行,如何创建在主队列执行的默认对话请看下面post请求)
///创建任务对象task
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:
        ^(NSData *data, NSURLResponse *response, NSError *error) {
        NSLog(@"请求完成...");
        if (!error) {
            NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];          
            dispatch_async(dispatch_get_main_queue(), ^{//由于默认情况下简单对话是在非主队列中执行的,所以这里刷新UI需要切换回主队列(主线程?)执行
                [self reloadView:resDict];
           });
        } else {
            NSLog(@"error : %@", error.localizedDescription);
        }
    }];
[task resume];//新创建的task默认是暂停的,需要显示让其执行

/*这个Webservice是Xml格式的*/
NSString *baseURL = @"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName";
NSString *url = [baseURL stringByAppendingString:[NSString stringWithFormat:@"?theCityName=%@", @"上海"]];//GET方法的参数直接跟在URL后面,是明文;参数如何设置是在对应的Webservice网站上查的
NSString *urlStr = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];//把中文部分转码和谐掉

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];//建立请求对象 
NSURLSession *session = [NSURLSession sharedSession];//创建一个会话对象
///创建任务对象task
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:
        ^(NSData *data, NSURLResponse *response, NSError *error) {
        NSLog(@"请求完成...");
        if (!error) {
           NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
           NSLog(@"%@",str);
        } else {
            NSLog(@"error : %@", error.localizedDescription);
        }
    }];
[task resume];//新创建的task默认是暂停的,需要显示让其执行

2.3 实现Post请求 (请求天气预报web service,xml格式)

    NSString *baseURL = @"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName";
    NSString *post = [NSString stringWithFormat:@"theCityName=%@", @"上海"];//POST的请求参数
    NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];//将POST的请求参数封装成NSData类

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:baseURL]];//创建request对象
    [request setHTTPMethod:@"POST"];//显示设定request使用POST方法
    [request setHTTPBody:postData];//把POST的请求参数放到请求体里面

    NSURLSessionConfiguration *defaultConfig = [NSURLSessionConfiguration defaultSessionConfiguration];//(使用默认会话,这样会task就会在主队列执行)
    NSURLSession *session = [NSURLSession sessionWithConfiguration: defaultConfig delegate: nil delegateQueue: [NSOperationQueue mainQueue]];//(使用默认会话,这样task就会在主队列执行)
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:
        ^(NSData *data, NSURLResponse *response, NSError *error) {
        NSLog(@"请求完成...");
        if (!error) {
            NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];//查看请求到的数据
            NSLog(@"%@",str);           
        } else {
            NSString *str =@"错误";
            NSLog(@"%@",str);
        }
    }];

    [task resume];

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/">
  <string>直辖市</string>
  <string>上海</string>
  <string>58367</string>
  <string>58367.jpg</string>
  <string>2021/7/28 20:25:41</string>
  <string>27℃/31℃</string>
  <string>7月28日 小雨转阴</string>
  <string>东南风3-4级</string>
  <string>7.gif</string>
  <string>2.gif</string>
  <string>今日天气实况:气温:28℃;风向/风力:北风 1级;湿度:90%;紫外线强度:最弱。</string>
  <string>中国人民保险感冒指数:少发,感冒机率较低,避免长期处于空调屋中。
健臻·血糖指数:易波动,气温多变,血糖易波动,请注意监测。
穿衣指数:热,适合穿T恤、短薄外套等夏季服装。
洗车指数:不宜,有雨,雨水和泥水会弄脏爱车。
紫外线指数:最弱,辐射弱,涂擦SPF8-12防晒护肤品。
</string>
  <string>26℃/31℃</string>
  <string>7月29日 阴转小雨</string>
  <string>南风3-4级</string>
  <string>2.gif</string>
  <string>7.gif</string>
  <string>26℃/32℃</string>
  <string>7月30日 阴转晴</string>
  <string>西风3-4级转西南风小于3级</string>
  <string>2.gif</string>
  <string>0.gif</string>
  <string>上海简称:沪,位置:上海地处长江三角洲前缘,东濒东海,南临杭州湾,西接江苏,浙江两省,北界长江入海,正当我国南北岸线的中部,北纬31°14′,东经121°29′。面积:总面积7823.5平方公里。人口:人口1000多万。上海丰富的人文资源、迷人的城市风貌、繁华的商业街市和欢乐的节庆活动形成了独特的都市景观。游览上海,不仅能体验到大都市中西合壁、商儒交融、八方来风的氛围,而且能感受到这个城市人流熙攘、车水马龙、灯火璀璨的活力。上海在中国现代史上占有着十分重要的地位,她是中国共产党的诞生地。许多震动中外的历史事件在这里发生,留下了众多的革命遗迹,处处为您讲述着一个个使人永不忘怀的可歌可泣的故事,成为包含民俗的人文景观和纪念地。在上海,每到秋祭,纷至沓来的人们在这里祭祀先烈、缅怀革命历史,已成为了一种风俗。大上海在中国近代历史中,曾是风起云涌可歌可泣的地方。在这里荟萃多少风云人物,散落在上海各处的不同住宅建筑,由于其主人的非同寻常,蕴含了耐人寻味的历史意义。这里曾留下许多革命先烈的足迹。瞻仰孙中山、宋庆龄、鲁迅等故居,会使您产生抚今追昔的深沉遐思,这里还有无数个达官贵人的住宅,探访一下李鸿章、蒋介石等人的公馆,可以联想起主人那段显赫的发迹史。</string>
</ArrayOfString>

2.4 下载数据

2.5 GET和POST

3. AFNetworking (底层采用NSURLSession)

3.1 why to choose it?

3.2 How to config it ?

3.3 How to use it ?

上一篇下一篇

猜你喜欢

热点阅读