带有发布请求的swift3 webview

Posted

技术标签:

【中文标题】带有发布请求的swift3 webview【英文标题】:swift3 webview with post request 【发布时间】:2016-12-31 14:36:12 【问题描述】:

我正在运行一个学校项目,我是 swift3 的新手。

通过搜索,我知道如何将数据从一个视图传递到另一个视图: Passing data from a tableview to webview

在上面的帖子中,他正在使用http get请求将数据传递到网站,然后重新加载webivew:

let URL = NSURL(string: "https://www.example.com?data=\(passData)")
webView.loadRequest(NSURLRequest(url: URL! as URL) as URLRequest)

我在这里看到了一些有用的链接,例如关于带有 http post 请求的代码: HTTP Request in Swift with POST method。结果,代码可以打印出http响应。

我的问题是,如何通过发送 http post reuqest(如 id、name 等)而不是 get 方法来实现 webview。

换句话说:我想重新加载 webview(如 example.com),该网站将包含我通过 http post 请求发送的值。

example.com:

$id = $_POST['id'];
echo $id;

谢谢。

【问题讨论】:

【参考方案1】:

只需为 POST 创建一个URLRequest,如第二个链接所示,并将其传递给webView

var request = URLRequest(url: URL(string: "http://www.example.com/")!)
request.httpMethod = "POST"
let postString = "id=\(idString)"
request.httpBody = postString.data(using: .utf8)
webView.loadRequest(request) //if your `webView` is `UIWebView`

(考虑使用WKWebView 而不是UIWebView。)

如果idString 包含一些特殊字符,您可能需要对其进行转义。


顺便说一下两行代码:

let URL = NSURL(string: "https://www.example.com?data=\(passData)")
webView.loadRequest(NSURLRequest(url: URL! as URL) as URLRequest)

似乎不是一个好的 Swift 3 代码。可以写成:

let url = URL(string: "https://www.example.com?data=\(passData)")!
webView.loadRequest(URLRequest(url: url))

【讨论】:

如果上述方法不起作用,还有另一种解决方案:***.com/a/44951545/4260691

以上是关于带有发布请求的swift3 webview的主要内容,如果未能解决你的问题,请参考以下文章

Swift3 CoreData - fetchResultsController

带有 Swift 3 的 Alamofire 4.3,POST 请求不适用于 URL 参数

快速更新核心数据对象 3

Json 解析 Swift 3 Alamofire

swift3中的导航问题,带有没有故事板的.xib文件

使用 Alamofire 调用带有 HTTP Header 和 Body 的 API