我有一個簡單的GET請求登錄。用戶名是銀和密碼是MOTO & @ 10
我使用的處理請求SwiftHttp框架。點擊登錄請求時,我總是得到回覆爲false。
然而在打在瀏覽器的登錄請求URL(替代實際域與服務器)我得到真正:
https://server/api/check-access/by-login-pass?_key=wlyOF7TM8Y3tn19KUdlq&login=silver&pass=MOto%[email protected]Swift編碼&GET參數
有一些錯誤的密碼編碼&。儘管我用百分比編碼替換了它。這裏是我的代碼:
do {
let passwordString = self.convertSpecialCharacters(string: password.text!)
print("%@", passwordString)
let opt = try HTTP.GET(Constants.kLoginUrl, parameters: ["login": username.text!, "pass": passwordString])
opt.start { response in
if let err = response.error {
print("error: \(err.localizedDescription)")
return
}
print("opt finished: \(response.description)")
self.parseLoginResponse(response.data)
}
} catch _ as NSError {
}
這是convertSpecialCharacters:
func convertSpecialCharacters(string: String) -> String {
var newString = string
let arrayEncode = ["&", "<", ">", "\"", "'", "-", "..."]
for (escaped_char) in arrayEncode {
newString = newString.encode(escaped_char)
}
return newString
}
擴展編碼:
extension String {
func encode(_ chars: String) -> String
{
let forbidden = CharacterSet(charactersIn: chars)
return self.addingPercentEncoding(withAllowedCharacters: forbidden.inverted) ?? self
}
}
,請不要使用'GET'對於您一起發送密碼登錄的目的: http://stackoverflow.com/a/323286/2442804 – luk2302
請參閱http://stackoverflow.com/questions/24551816/swift-encode-url – Sulthan
據我瞭解SwiftHTTP的最新來源,它將百分比編碼正確地添加到'參數'。所以,如果你調用'convertSpecialCharacters(string:)',密碼是雙重編碼的。刪除'let passwordString = self.convertSpecialCharacters(string:password.text!)'這行並將'parameters'創建爲'[「login」:username.text !,「pass」:password.text!]'(假設兩個'!'在這裏是安全的。) – OOPer