当我到达需要进行POST调用的位置时,我正在用Swift 4 i开发一个应用程序,例如带有标题和带有参数的正文的“基本访问身份验证”,它对我不起作用。
基本上,我想模拟此调用,以返回200,但这回馈了我:
“ responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain = NSCocoaErrorDomain代码= 3840“字符周围的值无效 0.“ UserInfo = {NSDebugDescription =字符0周围的值无效。}))”
API网址为:
https://gist.github.com/juaniiton1/3a3e422ed99de22f3f3686bb3b7788d7
,该部分为“在已授权的用户投资组合中存储新交易”。
在这里,我借助Alamofire(4.7.3)传递了模拟请求“将新交易存储在已授权的用户投资组合中”的代码。
我遵循的步骤如下:
我要做的是,编码您所使用的“用户名”和“密码”的数据 在base64中给我。
然后我将Stirng类型的日期格式化为Date(ISO类型)。
为数据创建字典后
最后我创建了请求,将以上所有内容放在一起。
此外,在Xcode中,我还具有TransportSecurity来使 请求“ https”
我在这里留下代码:
导入基金会 导入UIKit 导入Alamofire
ViewController类:UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//URL
let url = URL(string: "https://test.cryptojet.io/coins/portfolio")!
// credentials encoded in base64
let username = "richard@rich.com"
let password = "secret"
let loginData = String(format: "%@:%@", username, password).data(using: String.Encoding.utf8)!
let base64LoginData = loginData.base64EncodedString()
let headers = ["Authorization" : "Basic \(base64LoginData)",
"Content-Type": "application/json"]
//Prepare date - Data UTC to ISO
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
let dataSting = "2016-06-05T16:56:57.019+01:00"
let dateISO = dateFormatter.date(from: dataSting)
//Prepare paramsBody -> tot Data
let paramsBody: [String: Any] = ["coin_id": 2,
"amount": -2.2183,
"price_usd": 675.982,
"traded_at": dateISO!]
//Request
Alamofire.request(url, method: .post,parameters: paramsBody, encoding: URLEncoding.default, headers: headers).responseJSON { response in
switch response.result {
case .success:
guard let json = response.result.value as? [String: Any],
let data = json["trade"] as? [String: Any] else {
return
}
print(data)
case .failure(let error):
print(error)
}
}
}
您能告诉我服务器上的POST身份验证呼叫出了什么问题吗?
答案 0 :(得分:0)
我尝试向您的网址发出请求,并且似乎来自您的请求的响应不是JSON:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="robots" content="noindex,nofollow" />
<style> body { background-color: #F9F9F9; color: #222; font: 14px/1.4 Helvetica, Arial, sans-serif; margin: 0; padding-bottom: 45px; }
a { cursor: pointer; text-decoration: none; }
a:hover { text-decoration: underline; }
...
答案 1 :(得分:0)
如果您尝试摘要,则需要此方法:
credential = URLCredential(user: UserDefaults.standard.string(forKey: "userName") ?? "admin", password: UserDefaults.standard.string(forKey: "password") ?? "admin", persistence: .none)
let sessionMananager = Alamofire.SessionManager.default
_ = sessionMananager.request(url)
.authenticate(usingCredential: credential!)
.responseJSON { response in
}