Add*_*dev 4 code-injection ios swift
我正在尝试向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()
}
Run Code Online (Sandbox Code Playgroud)
它有效,但并不完美.如果我这样调用函数:
client.sendPostToUrl("http://novagecko.com/tests/test.php",
withParams: ["hello":"world","inject":"param1=value1¶m2=value2"]);
Run Code Online (Sandbox Code Playgroud)
服务器检测到3个帖子字段(带有键hello,inject和param2)而不是2个.
我怎样才能逃脱关键和价值观?
我还能做些什么改进方法吗?
Tho*_*iau 10
如果您可以定位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 ?? ""
}
Run Code Online (Sandbox Code Playgroud)
现在按照您的预期encodeParameters(params:["hello":"world","inject":"param1=value1¶m2=value2"])返回hello=world&inject=param1%3Dvalue1%26param2%3Dvalue2.
否则,创建可让您正确转义值的字符集的最佳方法是:
var safeCharacterSet = NSCharacterSet.URLQueryAllowedCharacterSet().mutableCopy()
safeCharacterSet.removeCharactersInString("&=")
Run Code Online (Sandbox Code Playgroud)
并查看@ rintaro的答案,正确使用filter/map以很好的方式执行编码.
| 归档时间: |
|
| 查看次数: |
3913 次 |
| 最近记录: |