美文网首页
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