php不能解析ios网络请求_ios 网络请求数据解析 - CSDN
  • 本来可以早早睡觉了,突然发现PHP请求回来的JSON格式居然无法解析出正确的数据。 解析代码 request.responseEncoding = NSUTF8StringEncoding; NSString *responseString = [request responseString]; 用...

    本来可以早早睡觉了,突然发现PHP请求回来的JSON格式居然无法解析出正确的数据。


    解析代码

    request.responseEncoding = NSUTF8StringEncoding;
    NSString *responseString = [request responseString];

    用浏览器打开发现是正确的JSON格式,那就怀疑是我们客户端代码的问题。

    使用一下代码解析

        request.responseEncoding = NSUTF8StringEncoding;
        NSString *responseString = [request responseString];
        
        if (responseString == nil)
        {
            NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_2312_80); 
            
            request.responseEncoding = enc;
            responseString = [request responseString];
        }
        
        if (responseString == nil)
        {        
            request.responseEncoding = NSISOLatin1StringEncoding;
            responseString = [request responseString];
        }
        

    可以解析出来,但是发现解析的中文是乱码。

    那就开始怀疑是apache的问题,但是我使用的是XAMPP最新的版本,查了很久发现现在的版本是不需要设置字符集的。

    在想了几种可能性后,突然想到会不会是文本的保存格式的问题,我将XXX.PHP用UTF-8保存后,正确可以解析出数据。



    展开全文
  • 本内容用于完成一个小功能,iOS客户端发送名字字符,服务器接收这个名字,然后在iOS客户端异步通信把服务器返回的内容显示出来。首先介绍几个知识点: 使用GET网络通信 PHP中何时使用 GET? 通过 GET 方法从...

    
    
    本内容用于完成一个小功能,iOS客户端发送名字字符,服务器接收这个名字,然后在iOS客户端异步通信把服务器返回的内容显示出来。首先介绍几个知识点:

    使用GET网络通信

    PHP中何时使用 GET?

    通过 GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)。GET 对所发送信息的数量也有限制。限制在大于 2000 个字符。不过,由于变量显示在 URL 中,把页面添加到书签中也更为方便。

    GET 可用于发送非敏感的数据。

    PHP服务器端的代码

    <?php
    $result= $_GET["name"];
    $arr = array(
        'name'=>"returned name is".$result,
    );
    $json = json_encode($arr);
    
    echo $json;
    功能十分简单,接收客户端发送的“name”返回json格式的数组;

    服务器端的代码 

        NSString *text = [NSString stringWithFormat:@"http://localhost:63342/test/welcome_get.php?<span style="color:#ff0000;">name=%@",self.nameTextField.text</span>];
        NSURL *url = [NSURL URLWithString:text];
        NSLog(@"%@",url);
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [NSURLConnection sendAsynchronousRequest:request queue:<span style="color:#ff0000;">[NSOperationQueue mainQueue]</span>   completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            NSLog(@"%@",response);
                          if (data) {
                              dispatch_async(dispatch_get_main_queue(), ^{
                                  
                                  NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
                                  
                                  NSString *text = json[@"name"];
                                  
                                  self.textView.text = text;
                              });
                          }
                      }];
    
    将UI里的nameTextField的文字发给前面的服务器,然后解析jsondata,并在textView中显示键值为name的返回值;需要注意的是由于此处传输的信息量很小我是用了mainQueue,这容易阻塞进程,不过此处可以。
    最后结果如下:


    使用POST实现网络通信

    何时使用 POST?

    通过 POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量也无限制

    此外 POST 支持高阶功能,比如在向服务器上传文件时进行 multi-part 二进制输入。

    不过,由于变量未显示在 URL 中,也就无法将页面添加到书签。

    提示:开发者偏爱 POST 来发送表单数据。


    PHP代码改为POST:
    <?php
    $result= $_POST["name"];
    $arr = array(
        'name'=>"returned name is   ".$result,
    );
    $json = json_encode($arr);
    
    echo $json;

    OC代码改为:

        NSMutableURLRequest *request = [<span style="color:#ff6666;">NSMutableURLRequest</span> requestWithURL:[NSURL URLWithString:@"http://localhost:63342/test/welcome_get.php"]];
        request.HTTPMethod = @"POST";
        request.HTTPBody = [[NSString stringWithFormat:@"name=%@",self.nameTextField.text] dataUsingEncoding:NSUTF8StringEncoding ];
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            if (data) {
                
                NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
                NSLog(@"%@",json);
                NSString *text = json[@"name"];
    
    此处使用httpmethod和httpbody来进行设置,并使用UTF-8编码。
    运行结果是一样的。







    展开全文
  • 在移动开发中,数据大多数都来源于网络网络的数据如何获取变成自己应用的数据呢,这里有一种方式就是JSON解析。我们这里已经把网络数据下载在了本地文件夹。   #import  #import "VocalConcertModel.h" int...
     移动开发过程中,很多时候,我们的数据来自网络别人提供的数据接口,所以我们做app的时候,需要用别人提供的接口把数据解析下载到本地,然后建立数据模型,再把数据显示到UI 界面上,网络上一搬提供两种数据的接口
    Json 数据,xml 数据.
    1.Json 下载并解析
    //.m  文件中定义两个对象

    @interface ViewController ()<NSURLConnectionDataDelegate>
    {
        NSURLConnection *_urlConnection;  //用于下载的对象
        NSMutableData *_downloadData;     //存储下载的数据
    }


    //然后需要在viewDIdLoad 方法中去初始化两个对象:
    - (void)viewDidLoad
    {
    NSString *urlString=@"http://192.168.88.8/sns/my/user_list.php?page=1d&number=20";
    //创建并初始化_urlConnection 对象
    //参数说明:
      //参数1.initWithRequest:网络请求url
     // 参数2. delegate 网络请求成功后处理事件,需要遵守     NSURLConnectionDataDelegate协议,
    //参数3.startImmediately  是否立即下载,一般都是YES

          _urlConnection=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] delegate:self startImmediately:YES];

    //创建_downloadData  并初始化对象

    _downloadData=[[NSMutableData alloc]init];


    //遵守NSURLConnectionDataDelegate协议的方法
    //当接收到服务器响应时执行

    -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    {
        NSLog(@"开始下载数据");
    }
    //作用当接收到数据时执行,下载数据较多的时候执行,需要将每次下载的数据合并到一
    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    {
        //每次下载到数据都添加到数据中
        NSLog(@"下载数据中");
        [_downloadData appendData:data];
        
    }
    //下载完成
    -(void)connectionDidFinishLoading:(NSURLConnection *)connection
    {
        
        
        //数据下载完成后,解析下载完成的数据
        //Serialization  把json格式的数据,解析为oc 的数据类型
       //Json 格式的最上层是什么数据类型,就定义什么数据类型去接收数据

      NSDictionary *dict= [NSJSONSerialization  JSONObjectWithData:_downloadData options: NSJSONReadingMutableContainers error:nil ];
       //打印验证数据是否解析成功
        NSLog(@"dict=%@",dict);
          //接着建立数据模型存储数据
          ………

    }




     
    展开全文
  • iOS-原生网络请求

    2016-02-26 11:16:25
    用多了AFN难免对苹果底层的网络请求陌生了许多,编程所谓一天敲就手生,尝试几种原生网络请求方法,和大家共享…普及: URL Session的基本概念1.三种工作模式:默认会话模式(default):工作模式类似于原来的...

    用多了AFN难免对苹果底层的网络请求陌生了许多,编程所谓一天不敲就手生,尝试几种原生网络请求方法,和大家共享…

    普及:
    URL Session的基本概念

    1.三种工作模式:

    默认会话模式(default):工作模式类似于原来的NSURLConnection,使用的是基于磁盘缓存的持久化策略,使用用户keychain中保存的证书进行认证授权。

    瞬时会话模式(ephemeral):该模式不使用磁盘保存任何数据。所有和会话相关的caches,证书,cookies等都被保存在RAM中,因此当程序使会话无效,这些缓存的数据就会被自动清空。

    后台会话模式(background):该模式在后台完成上传和下载,在创建Configuration对象的时候需要提供一个NSString类型的ID用于标识完成工作的后台会话。

    2.NSURLSession支持的三种任务

    NSURLSession类支持三种类型的任务:加载数据,下载和上传。

    二、相关的类

    NSURLConnection这个名字,实际上指的是一组构成Foundation框架中URL加载系统的相互关联的组件:NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage,以及和它同名的NSURLConnection。

    在WWDC 2013中,Apple的团队对NSURLConnection进行了重构,并推出了NSURLSession作为替代。

    NSURLSession也是一组相互依赖的类,它的大部分组件和NSURLConnection中的组件相同如NSURLRequest,NSURLCache等。而NSURLSession的不同之处在于,它将NSURLConnection替换为NSURLSession和NSURLSessionConfiguration,以及3个NSURLSessionTask的子类:NSURLSessionDataTask, NSURLSessionUploadTask, 和NSURLSessionDownloadTask。
    这里写图片描述

    使用:

    GET:
    block 方式:

    -(void)networking1{
        _MB = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
        [_MB setLabelText:@"正在加载..."];
        [_MB show:YES];
        NSString *path = @"http://apis.juhe.cn/train/ticket.price.php";
        NSString *URL = [NSString stringWithFormat:@"%@?key=%@&train_no=%@&from_station_no=%@&to_station_no=%@&date=%@",path,@"718ab93527120b628c21db1958d9af1",train_no,from_station_no,to_station_no,self.dateStr];
        //以免有中文进行UTF编码
        NSString *UTFPathURL = [URL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        //请求路径
        NSURL *url = [NSURL URLWithString:UTFPathURL];
        //创建请求对象
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        //设置请求超时
        request.timeoutInterval = 2;
        //创建session配置对象
        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        //创建session对象
        NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
        //添加网络任务
        NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            NSLog(@"网络请求开始->");
    
            if (error) {
                NSLog(@"请求失败...");
                dispatch_async(dispatch_get_main_queue(), ^{
                    [_MB hide:YES];
                });
            }else{
                dispatch_async(dispatch_get_main_queue(), ^{
                    [_MB hide:YES];
                });
                NSLog(@"请求成功:%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
                //用苹果字典JSON解析(NSJSONSerialization) 解析JSON
                NSDictionary *dataDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
                NSLog(@"解析JSON完毕:打印下看看%@",dataDict);
                NSNull *result = [dataDict objectForKey:@"result"];
                if (result == [NSNull null]) {
                    UIAlertController *av = [UIAlertController alertControllerWithTitle:@"提示" message:@"网络错误,请重试" preferredStyle:UIAlertControllerStyleAlert];
                    [av addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]];
                    [self presentViewController:av animated:YES completion:nil];
                }else{
                    NSDictionary *resultDict = (NSDictionary *)result;
                    NSLog(@"请求成功数据已经,继续展示到界面中:%@",resultDict);
                }
            }
        }];
        //开始任务
        [task resume];
    }
    展开全文
  • iOS开发中,大多数情况下,从网络获取的数据通常分两种。 JSON格式或者XML格式。 JSON是一种轻量级的数据格式,一般用于数据交互 JSON数据类似OC中的字典,解析方式也有很多ios5中apple增加了解析JSON的api:...
  • get请求 //获取当前时间 let now = Date() //当前时间的时间戳 let timeInterval:TimeInterval = now.timeIntervalSince1970 let timeStamp = String(timeInterval) let url = URL(string: "...
  • 自己动手写一个 iOS 网络请求库(一)NSURLSession 初探 自己动手写一个 iOS 网络请求库(二)封装接口 自己动手写一个 iOS 网络请求库(三)降低耦合 自己动手写一个 iOS 网络请求库(四)快速文件...
  • iOS请求数据AFNetworking

    2015-12-25 15:33:04
    众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐。操作起来很方便。不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各种序列化的...
  • iOS网络数据解析

    2019-07-12 06:31:42
    iOS开发过程中,网络数据的传输过程一般是:客户端发送请求给服务器,服务器接收到客户端发送的网络请求后返回相应的数据。此时客户端需要把服务器返回的数据转化为前段和移动端开发中使用的数据格式(如OC/java)。...
  • IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的。  在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装例子。我这里要给出的封装代码,是异步的,...
  • 网络,json,xml 通过NSURLConnection实现网络数据下载 通过NSURLConnection这个类来创建一个异步的请求 NSURLconnection提供了两种方式来实现链接,一种是同步的,另一种是异步的。异步的链接将会创建...
  • 有时网络获取的JSON返回的是一个数组,这个时候我们可以将其转化为字符串,然后人为构造成一个字典然后再解析。 NSString *adminURL=@...
  • 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式。 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验(点击打开链接)。此网站不仅可以检测...
  • iOS网络请求的使用

    2018-06-27 15:30:15
    前言:苹果官方提供的网络请求API有两种: NSURLConnection、NSURLSession。还有,目前的用的最多是主流框架:AFNetworkingiOS 7之前,只有 NSURLConncetioniOS 9之后,苹果官方放弃NSURLConnection,推荐使用...
  • AFNetworking 我项目里面的网络请求是一外包大牛基于AFN2.x...子网络请求 自己处理自己的数据,但是缺点就是AFN框架太老,适合其他人使用。所以。。。 先瞅瞅效果哈~ 网络请求 基于AFN3.x核心类AFURLSessionMan
  • iOS网络请求总结、GET、POST、同步、异步代码块、异步代理、第三方AFNetWorking2.0使用 首先需要明白, GET跟POST 区别: GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性高,地址最多...
  • IOS SDK为HTTP请求提供了同步和异步两种请求这种不同的API,而且可以使用Get或POST等请求方法。1.同步Get请求在贴代码之前先对项目有个整体的说明:如图所示 首先新建Master-Detail Application类型项目,我们可以...
  • HTTP : 是应用层的网络传输协议,对于http的请求方式 包括两种:GET 和 POST , 链接方式也包括两种 同步链接 和 异步链接 ...1:GET请求 : 服务器的地址 和 请求参数都会出现在请求接口中,也就是说 服务器地址和请求
  • http网络库是集XML解析,Json解析网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库。最新版本支持session,xctool单元测试。网络获取数据一直是手机软件的重中之重,...
  • 初学者的总结的网络请求数据的JSON的解析的两种方法对比,有什么不对的地方还请见谅 //(老方法)网络请求数据JSON解析 //获取访问路径 NSString *path=@"http://1.studyios.sinaapp.com/getAllClass.php"; ...
1 2 3 4 5 ... 20
收藏数 8,642
精华内容 3,456
关键字:

php不能解析ios网络请求