美文网首页
iOS开发经验 | POST 加号变空格

iOS开发经验 | POST 加号变空格

作者: UncleFool | 来源:发表于2018-07-11 16:47 被阅读234次
       文章目录:
       1.项目背景,整理问题
       2.分析/分解问题,排查原因
       3.描述问题,搜索关键词
       4.解决问题
       5.记录问题

1.项目背景,整理问题

目前正在做一款理财 APP,需要访问第三方银行的H5页面。本来使用 WKWebView 实现,但是传递参数时遇到一些问题。查了几个解决方法不是很友好,于是换成 UIWebView 实现。参数可以传递了,但是第三方一直提示 “验签错误Signature length not correct: got 252 but was expecting 256”

2.分析/分解问题,排查原因

H5 和安卓都是可以正常访问的,所以问题应该出在 iOS 端。为了验证猜测,后台同事帮忙写了一个空H5页面用来测试。交互流程:

步骤1:获取签名
iOS --请求-- 后台 --请求-- 第三方 --返回sign-- 后台 --返回sign-- iOS
步骤2:使用签名
iOS --获取sign--转码sign--发送sign-- 第三方--加载页面出错opps!--iOS
iOS --获取sign--转码sign--发送sign-- 第三方 --成功加载页面bingo!-- iOS

经过比对发现参数 sign 的字符串中,+变成了空格。

3.描述问题,搜索关键词

高效检索是程序员必备技能,高效前提需要准确的描述问题。搜索关键字:POST 加号变空格,很快找到一篇对应这个问题的博客,于是有了下面的解决办法。

4.解决问题

传递参数前,我对参数进行了转码处理:

NSString *sign = [respDataDic[@"sign"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

正常情况下地址中的加号应该被转码成%2B,但是使用以上方法编码时并没有对加号进行处理。将上面方法替换如下:

NSString *sign = [respDataDic[@"sign"] stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet characterSetWithCharactersInString:@"#%<>[\\]^`{|}\"]+"].invertedSet];

另外,方法characterSetWithCharactersInString:后面接的参数,用户可自定义,代表的意思是需要对这些特殊字符进行转码。把加号添加进去问题就解决了。除了自定义,IOS也提供了几个枚举值,代表的特殊字符以及调用方法如下:

URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet     "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>?@[\]^`

相关文章

网友评论

      本文标题:iOS开发经验 | POST 加号变空格

      本文链接:https://www.haomeiwen.com/subject/scbhpftx.html