我正在尝试在我设计的应用中组成一个代表URLComponents()
。
代码如下:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var components = URLComponents()
components.scheme = "http"
components.host = "0.0.0.0"
components.port = 9090
let queryItemToken = URLQueryItem(name: "/predict?text", value: "what's your name?")
components.queryItems = [queryItemToken]
print(components.url as Any)
}
}
以下是上述代码段的输出:
Optional(http://0.0.0.0:9090?/predict?text=what's%20your%20name?)
由于?,上述输出在服务器上不起作用。在端口和查询之间!
如何防止URLComponents()
插入此多余的内容?在端口和查询之间!
目标输出:Optional(http://0.0.0.0:9090/predict?text=what's%20your%20name?)
答案 0 :(得分:3)
/predict
部分是path
,而不是查询项。 text
是实际的查询参数。
您要
var components = URLComponents()
components.scheme = "http"
components.host = "0.0.0.0"
components.port = 9090
components.path = "/predict"
let queryItemToken = URLQueryItem(name: "text", value: "what's your name?")
components.queryItems = [queryItemToken]
print(components.url!)
答案 1 :(得分:-2)
谢谢大家的回应。通过执行以下操作,无需使用URLComponents(),我摆脱了所有这些麻烦。
事实证明,在查询中发送一些原始特殊字符可能会破坏对网络的请求。
然后,在进一步处理之前,我使用字典来替换原始输入中的一些特殊字符,其他所有工作都顺利进行。非常感谢您的关注。
因此,假设输入了用户原始输入:
import UIKit
import Foundation
// An example of a user input
var input = "what's your name?"
// ASCII Encoding Reference: important to allow primary communication with the server
var mods = ["'": "%27",
"’": "%27",
" ": "%20",
"\"" : "%22",
"<" : "%3C",
">" : "%3E"]
for (spChar, repl) in mods {
input = input.replacingOccurrences(of: spChar, with: repl, options: .literal, range: nil)
}
let query = "http://0.0.0.0:9090/predict?text=" + input
这是我转瞬即逝的第三天,我确信必须有更清洁的方法来处理这些细微差别。