在Swift 4中,我有一个非常简单的GET请求,使用URLSession
和dataTask
的{{1}}创建URL / String。
我遇到的问题如下面的代码片段所示
URLComponents
我尝试直接构建var url = URLComponents(string: "http://myServer.com:8086/query")
url?.queryItems = [
URLQueryItem(name: "db", value: "Database"),
URLQueryItem(name: "q", value: ("SELECT valueOne,valueTwo FROM \"TABLE\" WHERE \"valueOne\"='\(currValue)' ORDER BY time DESC LIMIT 1"))
]
NSLog((url?.url?.absoluteString)!)
/*
NSLog: http://myServer.com:8086/query?db=Database&q=SELECT2alueOne,valueTwo
0.000000ROM222TABLE220WHERE222valueOne23D'currValue'
0RDER2Y 0me -8ESC2MIT2
*/
并将URL
与addingPercentEncoding
一起应用于字符串的查询部分,但是仍然得到相同的结果。唯一起作用的部分是用“ +”代替查询中的空白区域,但是转义的反向昏迷仍然存在问题。
我对Swift非常陌生,因此我的假设是我遗漏了一些非常明显的东西。任何和所有协助将不胜感激。
答案 0 :(得分:0)
因此,答案是NSLog
不能正确打印出转义百分比的字符串,而print
却可以正确打印。最好的办法就是在NSLog
行上设置一个断点,并检查url值是否正确。
答案 1 :(得分:-1)
我已经创建了此功能来生成URL。您可以使用此功能创建带有安全ASCII字符的URL。
func urlGenretor() -> URL{
var components = URLComponents()
components.scheme = "https"
components.host = "myServer.com:8086"
components.path = "/query"
let database = URLQueryItem(name: "db", value: "Database")
let queryItem2 = URLQueryItem(name: "q", value: ("SELECT valueOne,valueTwo FROM \"TABLE\" WHERE \"valueOne\"='\(currValue)' ORDER BY time DESC LIMIT 1"))
components.queryItems = [database,queryItem2]
let url = components.url
print(url!)
return url!