IOS - Swift 4.0 - 使用 Alamofire 的基本访问身份验证 -
<p><p>当我需要进行 POST 调用时,我正在 Swift 4 i 中做一个应用程序,例如带有 header 和带有参数的主体的“基本访问身份验证”,它对我不起作用。 </p>
<p>基本上我想模拟这个调用,返回一个 200,但它给了我:</p>
<blockquote>
<p>"responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error
Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character
0." UserInfo={NSDebugDescription=Invalid value around character 0.})) "</p>
</blockquote>
<p>API 网址是:</p>
<p> <a href="https://gist.github.com/juaniiton1/3a3e422ed99de22f3f3686bb3b7788d7" rel="noreferrer noopener nofollow">https://gist.github.com/juaniiton1/3a3e422ed99de22f3f3686bb3b7788d7</a> </p>
<p>该部分是“在经过身份验证的用户投资组合中存储新交易”。</p>
<p>在这里,我在 Alamofire (4.7.3) 的帮助下传递了模拟请求“在授权的用户投资组合中存储新交易”的代码。</p>
<p>我遵循的步骤如下:</p>
<ul>
<li><p>我所做的是,将你的“用户名”和“密码”数据编码
给我base64。</p></li>
<li><p>然后我将Stirng类型的日期格式化为Date类型(ISO类型)。</p></li>
<li><p>在我为数据创建字典之后</p></li>
<li><p>最后我创建了请求,将以上所有内容放在一起。</p></li>
<li><p>此外,在 Xcode 中,我还有 TransportSecurity 来制作
请求“https”</p></li>
</ul>
<p>这里我留下代码:</p>
<p>导入基础
导入 UIKit
进口 Alamofire </p>
<p>类 ViewController :UIViewController {</p>
<pre><code>override func viewDidLoad() {
super.viewDidLoad()
//URL
let url = URL(string: "https://test.cryptojet.io/coins/portfolio")!
// credentials encoded in base64
let username = "[email protected]"
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: = ["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? ,
let data = json["trade"] as? else {
return
}
print(data)
case .failure(let error):
print(error)
}
}
}
</code></pre>
<p>你能告诉我这个与服务器的 POST 身份验证调用有什么问题吗?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我试图向您的网址发出请求,但您的请求的响应似乎不是 JSON:</p>
<pre><code><!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; }
...
</code></pre></p>
<p style="font-size: 20px;">关于IOS - Swift 4.0 - 使用 Alamofire 的基本访问身份验证 -,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/52000469/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/52000469/
</a>
</p>
页:
[1]