iOS的URL处理
前两天处理iOSapp过程中(我是用swift语言写的,资料较少),被一个“字符串”搞了一晚上的时间到第二天才处理好,在此记下,望见过此文的学生有一天遇到该情况能三分钟搞定不浪费时间:
先看如下代码
func getBalance(){
let url = NSURL(string: "http://www.weather.com.cn/data/sk/101110101.html")
let data = NSData(contentsOfURL: url!)
if data != nil {
let dict: NSDictionary = (try! NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)) as! NSDictionary
let weatherInfo = dict.objectForKey("weatherinfo") as! NSDictionary
print("得到天气数据了")
var city = weatherInfo.objectForKey("city") as! String
print("得到城市名称了")
... ...
}
}
是不是觉得没什么,直接访问就可以了,没错,但是这只是最基本的URL地址,要是我们的地址是这样子的呢
http://183.252.21.19:81/bhys/d/api/?apiType=check&rqsJson={"cardNo":"999000002111","pwd":"000211","name":"民生卡11"}&sign=123456789
会发现我们的字符串里有双引号,参数有中文等特殊字符,这个时候,再直接访问会出现什么情况?不对,是根本访问不了,因为很显然我们需要在let url = NSURL(string: "http://......")该字符串里进行转义,用我们的斜杠/"但是转了之后还是无法通过,Xcode会报错:url is nil
因为我也是第一次接触app开发,没有OC经验,不晓得是iOS原本就不识别/转义还是swift不识别,毕竟新语言。
问题的解决是另一种“转义”——编码,将URL进行encode编码一下就可以了,上面那段URL将双引号和大括号经过encode编码如下:
http://183.252.21.19:81/bhys/d/api/?apiType=check&rqsJson=%7B%22cardNo%22:%22999000002111%22,%22pwd%22:%22pwd%22,%22name%22:%22民生卡11%22%7D&sign=123456789
这个时候不仅可以访问,还可以加参数,如下:
http://183.252.21.19:81/bhys/d/api/?apiType=check&rqsJson=%7B%22cardNo%22:%22"+IDNumber+"%22,%22pwd%22:%22"+pwdNumber+"%22,%22name%22:%22"+Name+"%22%7D&sign=123456789
记住:
一、有编码就有解码,不过解码那是服务端的事情了,移动端开发人员要知道这件事情。
二、上文只是提供一个思路,让遇到URL问题的同学知道有encode编码这件事,具体的转码还要看服务端的,有些服务端只提供一部分转码,如上文,只转
{"cardNo":"999000002111","pwd":"000211","name":"民生卡11"},而http://183.252.21.19:81/bhys/d/api/?apiType=check&rqsJson=没有转码,这都是可能的,还需变通,不可照搬。
iOS的URL处理的更多相关文章
- iOS根据Url 获取图片尺寸
iOS根据Url 获取图片尺寸 // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:(id)imageURL { NSURL* URL = nil; if([i ...
- iOS 自定义 URL Scheme 完全指南
http://www.cocoachina.com/industry/20140522/8514.html “” 阅读器 自定义URL Scheme 本文转自Migrant的博客,原文:<T ...
- iOS中URL的解码和转义问题
在iOS开发中,使用NSURLConnection去请求google places api时,如果请求的url中包含中文,则返回的结果为空,URL不能被google识别.NSString *_urlS ...
- iOS 根据url生成二维码贴到底图上
根据url 生成指定尺寸的二维码图片 UIImage * createBinaryCodeImg(const char * url ,CGFloat size) { //create binary c ...
- iOS:URL Scheme(完结)(18-1-3更)
1.APP跳转 2.APP功能跳转 3.系统功能跳转 1.APP跳转 1.被打开方 设置APP的URL Types(设置位置在 “项目 - TARGETS - APP icon - info - (拉 ...
- ios 自定义URL Scheme 设计
在 iOS 里,程序之间都是相互隔离,目前并没有一个有效的方式来做程序间通信,幸好 iOS 程序可以很方便的注册自己的 URL Scheme,这样就可以通过打开特定 URL 的方式来传递参数给另外一个 ...
- iOS 禁用`URL Scheme`和`Universal Link`(通用链接)
为什么要禁用URL Scheme和Universal Link(通用链接) 通常我们APP中都会嵌套一些web页面,有时我们的web页面会被DNS劫持从而跳转到其他APP中:或者是某些APP的Univ ...
- iOS 的url中含有中文解决方法
[NSURLURLWithString:urlString]生成URL对象时,iOS客户端不能正确进行网络请求,网上找到的URLEncode方法又不能完全解决问题. 方法1: NSString* en ...
- iOS UIWebView URL拦截
http://www.cocoachina.com/ios/20150626/12161.html 本文译者:candeladiao,原文:URL filtering for UIWebView on ...
随机推荐
- 基础笔记6(exception)
1.异常:一种处理错误的机制,将错误和业务分离. throwable的子类 error 和exception exception 分两类:checked (需要捕获处理或者抛出)和unchecked( ...
- mac 激活Ultra Edit16
一.文本编辑器UltraEdit 参照Ultra Edit16.10 Mac 破解下载,或者官方下载 Ultra Edit16即可 printf of=/Applications/UltraEdit. ...
- 关于oracle的准备
作者:Steven Feuerstein 提高编写PL/SQL代码数量及质量的四个简单易行指导方针 我从1990年就开始编写PL/SQL代码.这意味着我已经编写了几万行的软件代码,但我确信,其中的绝大 ...
- union (共用声明和共用一变量定义)
"联合"是一种特殊的类,也是一种构造类型的数据结构.在一个"联合"内可以定义多种不同的数据类型, 一个被说明为该"联合"类型的变量中,允许装 ...
- 常用sql语句总结
一.连接数据库 mysql -h127.0.0.1(连接地址) -P3303(端口号) -uroot(用户名) -p123456(密码) 二.常用语句 show datebases; 查看数据库 cr ...
- gitgub利用客户端实现简单的上传和同步
新建项目 打开客户端(将项目拷贝到本地) 选择要clone到的文件夹 想该文件夹中,导入自己需要上传的代码 然后,在网站上登录自己的gitgub,就可以看到刚才上传的项目了╮(╯▽╰)╭
- windows下面安装casperjs
因为需要 就学习了一下casperjs,CasperJS是一个开源的导航脚本处理和测试工具,基于PhantomJS(前端自动化测试工具)编写.由于casperjs对PhantomJS的依赖性,所以需要 ...
- ArrayList其实就那么一回事儿之源码浅析
ArrayList 算是常用的集合之一了,不知作为javaner的你有没在百忙之中抽出一点时间看看ArrayList的源码呢. 如果看了,你会觉得其实ArrayList其实就那么一回事儿,对吧,下面就 ...
- NSComparisonResul、NSNotFound、NSEnumerationOptions......的用处
NSNotFound 定义一个值,用于指示请求项找不到或不存在.Defines a value that indicates that an item requested couldn’t be fo ...
- 获取LocationProvider
Android的定位信息由LocationProvider对象来提供,该对象代表一个抽象的定位组件.在开始编程之前,需要先获得LocationProvider对象. 一.获取所有可用的Location ...