美文网首页iOS开发常用藤原とうふ店(自家用)
iOS WebView使用POST方式加载URL及传参

iOS WebView使用POST方式加载URL及传参

作者: 独孤流 | 来源:发表于2018-03-08 19:24 被阅读878次

在APP的使用场景中有一种是后端传一个URL给客户端,然后客户端使用webview打开这个URL,但一般默认webview加载URL都是使用get请求,但是某些特殊的请求会要求是POST方式的,这个问题解决方式如下:

  • 方法一、让服务器接口一并返回要打开的URL、method(post)、参数,让后webview发起请求时使用NSMutableRequest创建request请求,代码如下:
- (BOOL)isEmptyString:(NSString *)string
{
    if (string == nil || [string isKindOfClass:[NSNull class]] || [string isEqualToString:@"null"] ||
        [string isEqualToString:@"(null)"] || [string isEqualToString:@""] ||
        [string isEqualToString:@" "]) {
        return YES;
    }
    if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length] ==
        0) {
        return YES;
    }
    return NO;
}
- (void)loadUrl:(NSString *)urlStr method:(NSString *)method params:(NSDictionary *)params{
        NSURL *url = [NSURL URLWithString:urlStr];
        NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:url];
        if (method != nil && [method.uppercaseString isEqualToString:@"POST"]) {
            // 如果有webMethod并且是POST,则POST方式组合提交
            [requestM setHTTPMethod:@"POST"];
            NSString *body = nil;
            for (NSString *key in params.allKeys) {
                if ([self isEmptyString: body]) {
                    body = [NSString stringWithFormat:@"%@=%@",key,self.webParams[key]];
                }else{
                    body = [NSString stringWithFormat:@"%@&%@=%@",body,key,self.webParams[key]];
                }
            }
            [requestM setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]];
        }
      
        [self.webView loadRequest:requestM];
}


  • 方法二、使用webview加载html字符串执行form表单POST提交,html字符串可以是后台拼接好传给客户端执行或在客户端拼接也可以
- (void)loadHtmlWithUrl:(NSString *)urlStr method:(NSString *)method params:(NSDictionary *)params{
        NSString *htmlText = nil;
       if (method != nil && [method.uppercaseString isEqualToString:@"POST"]) {
          // 拼接form表单的请求地址
            htmlText = [NSString stringWithFormat:@"<html><body><form id=\"login\" name=\"login\" action=\"%@\" method=\"post\">",urlStr];
            // 拼接form表单的请求参数
            for (NSString *key in params.allKeys) {
                 htmlText = [NSString stringWithFormat:@"%@<input type=\"hidden\" name=\"%@\" value=\"%@\" />",htmlText,key,params[key]];
            }
           // 拼接form表单的尾部及JavaScript自动执行form表单提交
            htmlText = [NSString stringWithFormat:@"%@</form></body><script>document.login.submit();</script></html>;",htmlText];
       }

    [self.webView loadHTMLString:htmlText baseURL:nil];
}

拼接后的完整格式如下:

<html> 
<body>
     <form id="login" name="login" action="https://www.baidu.com" method="post">
        <input type="hidden" name="name" value="aaa" />
        <input type="hidden" name="age" value="123"/>
    </form>
</body>
<script>
    document.login.submit();
</script> 
</html>

相关文章

  • iOS UIWebView原生与网页交互常用知识点

    iOS WebView使用POST方式加载URL及传参iOS WebView打开URL时会对地址自动进行URL 前...

  • iOS WebView使用POST方式加载URL及传参

    在APP的使用场景中有一种是后端传一个URL给客户端,然后客户端使用webview打开这个URL,但一般默认web...

  • WebView post传参用法

    iOS WebView Post传参用法(注意URLEncoding编码)UIWebView用法post请求传参数...

  • vue路由间的传参params和query

    query方式传参及接收 示例一 query方式的传参,url看下图: params方式传参及接收 示例一 par...

  • 前端面试题04

    1get、post的区别 ① get传参方式是通过地址栏URL传递,是可以直接看到get传递的参数,post传参方...

  • get , post 的区别

    get , post 的区别? get 利用url传参, post 用实体传参 get 参数可能被缓存, post...

  • Android Webview使用攻略

    Android Webview使用攻略 加载url的方式: webView前进后退: 常见的处理网页后退: 清除缓...

  • iOS加载PDF文件

    本文主要介绍一下iOS加载PDF的方法。 使用webView加载 使用webView加载是最简单的方式,这是最大的...

  • WebView以POST方式加载URL

    一般情况下,调用WebView.loadUrl(url)方法即可加载需要展示的Html页面了,如果需要传参数的话,...

  • HttpClient调用

    GET无参 GET有参(方式一:直接拼接URL) GET有参(方式二:使用URI获得HttpGet) POST无参...

网友评论

    本文标题:iOS WebView使用POST方式加载URL及传参

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