Как запретить URLComponents(). Port добавлять знак вопроса перед запросом (Swift/Xcode)
Я пытаюсь составить представителя 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?)
2 ответа
/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!)
Спасибо всем за ответ. Я сошел со всего этого, выполнив следующие действия без необходимости использования 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
Это мой третий день с swift, я уверен, что должны быть более чистые подходы, чтобы справиться с этими нюансами.