gpt4 book ai didi

ios - 使用swift 3发送post请求(自签名证书问题)

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:05:42 24 4
gpt4 key购买 nike

我正在尝试将用户选择的一些数据发送到位于不同网络上的 LAMP 服务器上的 mysql 数据库。最近我在自己的机器上下载了一个服务器,一切正常。应用程序中的操作发送到服务器中的 php 文件,然后 php 处理将其发送到 mysql 数据库。最近我获得了访问我们需要使用的服务器的权限。现在,当我尝试做同样的事情时,我收到一条错误消息,指出该服务器的证书无效。我知道以前我处理的是 http,现在它需要是 https,但我不清楚我应该如何更改它以使其正常工作。我在这里看到很多关于如何做到这一点的不同回应,但他们经常被诸如“这是一种解决方法”或“该应用程序可能被拒绝”等评论所反驳。

这是我当前的功能:

func sendToServer(firstEntry: String, secondEntry: String, serverAddr: String){

let uid = firstEntry
let gender = secondEntry
let request = NSMutableURLRequest(url: NSURL(string: serverAddr)! as URL)
request.httpMethod = "POST"
let postString = "UID=\(uid)&Gender=\(gender)"
request.httpBody = postString.data(using: String.Encoding.utf8)

let task = URLSession.shared.dataTask(with: request as URLRequest) {
data, response, error in

if error != nil {
print("error=\(error)")
return
}

print("response = \(response)")

let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print("responseString = \(responseString)")
}
task.resume()

我读过一些东西,例如不使用 shared here 来让它工作,但我对此仍然不是很清楚。我想要做的就是将此数据发送到位于服务器上的 php。数据本身并不敏感,它只是发送到数据库的简单性别和是或否的答案。但是,在没有影响用户体验的攻击并且不会因此而被拒绝的情况下,我需要它足够安全。这里的任何帮助将不胜感激。谢谢

最佳答案

你需要做两件事:

  1. 将域异常添加到您的 plist 文件中,我将向您推荐这篇 stackoverflow 帖子 How do I load an HTTP URL with App Transport Security enabled in iOS 9?

  2. 您需要实现您的 URLSessionDelegate。这一种方法是您的 https 请求的最低限度。您会在 URLSessionTaskDelegate 上找到一个几乎完全相同的方法,该方法用于任务特定的身份验证,这个方法用于 session 范围的身份验证。从代码中可以看出,关键部分是 URLCredential(trust: challenge.protectionSpace.serverTrust!),您可以在其中指定您信任该服务器。

    class RequestDelegate: NSObject, URLSessionDelegate {

public func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void) {
completionHandler(URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
}
}

然后你只需创建 URLSession(configuration: URLSessionConfiguration.default, delegate: RequestDelegate(), delegateQueue: nil) 将你的委托(delegate)作为参数

测试并在 IOS 10 上工作。

希望这会有所帮助,这实际上是我关于 stackoverflow 的第一篇文章,所以你好,世界。

关于ios - 使用swift 3发送post请求(自签名证书问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42058850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com