当我需要进行 POST 调用时,我正在 Swift 4 i 中做一个应用程序,例如带有 header 和带有参数的主体的“基本访问身份验证”,它对我不起作用。
基本上我想模拟这个调用,返回一个 200,但它给了我:
"responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error
Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character
0." UserInfo={NSDebugDescription=Invalid value around character 0.})) "
API 网址是:
https://gist.github.com/juaniiton1/3a3e422ed99de22f3f3686bb3b7788d7
该部分是“在经过身份验证的用户投资组合中存储新交易”。
在这里,我在 Alamofire (4.7.3) 的帮助下传递了模拟请求“在授权的用户投资组合中存储新交易”的代码。
我遵循的步骤如下:
我所做的是,将你的“用户名”和“密码”数据编码
给我base64。
然后我将Stirng类型的日期格式化为Date类型(ISO类型)。
在我为数据创建字典之后
最后我创建了请求,将以上所有内容放在一起。
此外,在 Xcode 中,我还有 TransportSecurity 来制作
请求“https”
这里我留下代码:
导入基础
导入 UIKit
进口 Alamofire
类 View Controller :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 身份验证调用有什么问题吗?
Best Answer-推荐答案 strong>
我试图向您的网址发出请求,但您的请求的响应似乎不是 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; }
...
关于IOS - Swift 4.0 - 使用 Alamofire 的基本访问身份验证 -,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/52000469/
|