菜鸟教程小白 发表于 2022-12-11 20:29:17

IOS - Swift 4.0 - 使用 Alamofire 的基本访问身份验证 -


                                            <p><p>当我需要进行 POST 调用时,我正在 Swift 4 i 中做一个应用程序,例如带有 header 和带有参数的主体的“基本访问身份验证”,它对我不起作用。 </p>

<p>基本上我想模拟这个调用,返回一个 200,但它给了我:</p>

<blockquote>
<p>&#34;responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error
Domain=NSCocoaErrorDomain Code=3840 &#34;Invalid value around character
0.&#34; UserInfo={NSDebugDescription=Invalid value around character 0.})) &#34;</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: &#34;https://test.cryptojet.io/coins/portfolio&#34;)!

    // credentials encoded in base64
    let username = &#34;[email protected]&#34;
    let password = &#34;secret&#34;
    let loginData = String(format: &#34;%@:%@&#34;, username, password).data(using: String.Encoding.utf8)!
    let base64LoginData = loginData.base64EncodedString()
    let headers = [&#34;Authorization&#34; : &#34;Basic \(base64LoginData)&#34;,
                   &#34;Content-Type&#34;: &#34;application/json&#34;]

    //Prepare date - Data UTC to ISO
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = &#34;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZZZZZ&#34;
    let dataSting = &#34;2016-06-05T16:56:57.019+01:00&#34;
    let dateISO = dateFormatter.date(from: dataSting)

    //Prepare paramsBody -&gt; tot Data
    let paramsBody: = [&#34;coin_id&#34;: 2,
                                     &#34;amount&#34;: -2.2183,
                                     &#34;price_usd&#34;: 675.982,
                                     &#34;traded_at&#34;: 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[&#34;trade&#34;] 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>&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
      &lt;meta charset=&#34;UTF-8&#34; /&gt;
      &lt;meta name=&#34;robots&#34; content=&#34;noindex,nofollow&#34; /&gt;
      &lt;style&gt;            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]
查看完整版本: IOS - Swift 4.0 - 使用 Alamofire 的基本访问身份验证 -