OC中的NSURL

/*
     NSURL
     url用于标志internet上资源位置,它指定由于访问服务器的协议,服务器名称以及文件在服务器上的位置。http://3.chihuoyizu.sinaapp.com
     
     语法:
     protocol://username@hostname:port/path/filename?query#fragment
     
     1.protocol:代表网络协议,可以http,FTP,file等协议
     2.username:代表服务器用户名,可选参数
     3.hostname:代表服务器名称,可以是名称,也可以是‘节点地址’
     4.port:代表端口号,可选参数,如果是http协议,会默认端口为80端口,如果是FTP协议,会默认是21端口
     5.path/filename:代表文件在服务器路径
     6.query#fragment:代表查询条件,通常用于想服务器提供附加参数,一般只用于http URL,这里的查询条件是向服务器程序提供参数
     note:在URL中不可以出现中文,空格,百分号等一些列特殊字符串,因此我们需要对策URL进行编码
     
    -- 为什么要对url进行编码
         我们都知道HTTP协议中参数的传输是“Key-value”这种键值对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割,如“?name1 = value1&name2 =value2”,这样在服务器收到这种字符串的时候,就会用“&”分割出每一个参数,然后再用“=”来分割出参数值
     
     针对"name1=value1&name2=value2"我们来说一下客户端到服务器端的概念上解析过程:
     上述字符串在计算机中用ASCII码表示为:
     6E616D6531 3D 76616C756531 26 6E616D6532 3D 76616C756532。
     6E616D6531:name1
     3D:=
     76616C756531:value1
     26:&
     6E616D6532:name2
     3D:=
     76616C756532:value2
     
     服务端在接受到该数据后就可以遍历该字节流,首先一个一个字节流,当吃刀3D这个字节后,服务端就知道前面吃字节表示一个key,再向后吃,如果遇到26字节之间的是一个key的value,以此类推就可以解析出客服端传过来的参数。
     
     现在有这样一个问题,如果参数中就包含=或者&符号的时候,该怎么办。
     比如说“name1=value1”,其中”value1“的值是”va&lu=e1“,我们的本意就是只有一个键值对,但是服务端会解析成两个键值对,这样会产生歧义。
     如何解决上述问题带来的歧义呢?解决办法就是对参数进行url编码。
     
     URL编码只是简单地在特殊符号的各个字节前面加上%。例如,我们队上述会产生歧义的字符进行URL编码后结果”va%26lu%3De1“,这样服务端会吧紧跟在%号后面的字节当成普通的字节,就不会把它当成各个参数或者键值对的分割符
     
     */
//    char *dd = "name1=value1&name2=value2";
//    NSData *data = [NSData dataWithBytes:dd length:strlen(dd)];
//    NSLog(@"data = %@",data);
     NSString *urlString = @"http://b.hiphotos.baidu.com/image/pic/item/ac4bd11373f082021bd203054cfbfbedab641b43.jpg";
    
    //将url进行编码
    urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    
    //将url字符串转换成NSURL类
    NSURL *url = [NSURL URLWithString:urlString];
    
    //将NSdata接收从服务器传递过来的参数
    NSData *data = [NSData dataWithContentsOfURL:url];
    
     NSLog(@"data = %@",data);
    
    //在OC中将url字符串转换成NSURL时,器协议,主机域名,路径文件,查询田间都被封装成NSUR流泪的属性
    
    //转码后的urlString
    NSLog(@"url.absoluteString = %@",url.absoluteString);
    
    //转码后的协议
    NSLog(@"url.scheme = %@",url.scheme);
    
    NSLog(@"url.resourceSpecifier = %@",url.resourceSpecifier);
    
    NSLog(@"url.host = %@",url.host);//服务器名称
    
    NSLog(@"url.port = %@",url.port);//端口
    
    NSLog(@"url.user = %@",url.user);
    
    NSLog(@"url.password = %@",url.password);
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值