gpt4 book ai didi

ios - 如何在 Swift 中转义 HTTP 参数

转载 作者:搜寻专家 更新时间:2023-10-31 08:13:25 24 4
gpt4 key购买 nike

我正在尝试向 HTTP 服务器发送消息

顺便说一句,这是我的代码:

  func sendPostToUrl(url:String, withParams params: [String: String?] ) {
var request = NSMutableURLRequest(URL: NSURL(string: url)!)
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"

var err: NSError?
var bodyData = ""
for (key,value) in params{
if (value==nil){ continue }
let scapedKey = key.stringByAddingPercentEncodingWithAllowedCharacters(
.URLHostAllowedCharacterSet())!
let scapedValue = value!.stringByAddingPercentEncodingWithAllowedCharacters(
.URLHostAllowedCharacterSet())!
bodyData += "\(scapedKey)=\(scapedValue)&"
}
request.HTTPBody = bodyData.dataUsingEncoding
(NSUTF8StringEncoding, allowLossyConversion: true)

var task = session.dataTaskWithRequest(request,
completionHandler: {data, response, error -> Void in
println("Response: \(response)")
let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Data: \(dataString)")

})
task.resume()
}

它有效但并不完美。如果我这样调用函数:

    client.sendPostToUrl("http://novagecko.com/tests/test.php", 
withParams: ["hello":"world","inject":"param1=value1&param2=value2"]);

服务器检测到 3 个帖子字段(带有键 helloinjectparam2)而不是 2 个。

如何转义键和值?

我还能做些什么来改进该方法吗?

最佳答案

如果您可以针对 iOS 8(感谢@Rob),请改用 NSURLComponents 来转义您的参数:

import Foundation

func encodeParameters(#params: [String: String]) -> String {
var queryItems = map(params) { NSURLQueryItem(name:$0, value:$1)}
var components = NSURLComponents()
components.queryItems = queryItems
return components.percentEncodedQuery ?? ""
}

现在 encodeParameters(params:["hello":"world","inject":"param1=value1&param2=value2"]) 返回 hello=world&inject=param1%3Dvalue1%26param2 %3Dvalue2 如您所料。

否则,创建可让您正确转义值的字符集的最佳方法是:

var safeCharacterSet = NSCharacterSet.URLQueryAllowedCharacterSet().mutableCopy()
safeCharacterSet.removeCharactersInString("&=")

并查看@rintaro 的回答以正确使用过滤器/映射以一种很好的方式执行编码。

关于ios - 如何在 Swift 中转义 HTTP 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27148100/

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