首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >URLSession POST呼叫

URLSession POST呼叫
EN

Stack Overflow用户
提问于 2018-09-24 23:20:53
回答 1查看 166关注 0票数 0

我对URLSession没有太多的经验,但我正在尝试打一个POST电话,而且我一直收到两个不同的错误。

这是我的功能:

代码语言:javascript
复制
func test() {
    let parameters = ["username": "myUsername", "password": "myPassword"]
    guard let url = URL(string: "https://example.com:443/Auth/") else { return }
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else { return }
    request.httpBody = httpBody

    let session = URLSession.shared
    session.dataTask(with: request) { (data, response, error) in
        if let response = response {
            print(response)
        }
        if let data = data {
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: [])
                print(json)
            } catch {
                print(error)
            }
        }
    }.resume()
}

下面是我遇到的错误:

第一个有一个堆栈溢出链接:CredStore Perform Query error。我添加了他们说要添加的代码,但是我最后也出现了同样的错误。

代码语言:javascript
复制
CredStore - performQuery - Error copying matching creds.  Error=-25300, query = {
    class = inet;
    "m_Limit" = "m_LimitAll";
    ptcl = htps;
    "r_Attributes" = 1;
    sdmn = "/Auth/";
    srvr = "example.com";
    sync = syna; 
}

我得到的下一个错误是:

代码语言:javascript
复制
<NSHTTPURLResponse: 0x600000b94180> { URL: https://example.com:443/Auth/ } { Status Code: 401, Headers {
"Content-Length" =     (
    31
);
"Content-Type" =     (
    "text/plain"
);
Date =     (
    "Mon, 24 Sep 2018 23:16:45 GMT"
);
"Www-Authenticate" =     (
    "Basic realm=\"/Auth/\""
);
} }
Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

我收到了401个未经授权的错误。我看到它给我401的唯一原因是它没有正确读取用户名/密码?我不确定标题标题“用户名”和“密码”是否正确。实际的用户名和密码是绝对正确的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-25 17:59:06

对于遇到这个问题的人:

我想出了什么问题:

代码语言:javascript
复制
func test() {
    let username = "myUsername"
    let password = "myPassword"
    let loginString = String(format: "%@:%@", username, password)
    let loginData = loginString.data(using: String.Encoding.utf8)!
    let base64LoginString = loginData.base64EncodedString()

    let url = URL(string: "https://example.com:443/Auth/")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")

    let session = URLSession.shared
    session.dataTask(with: request) { (data, response, error) in
        if let response = response {
            print(response)
        }
        if let data = data {
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: [])
                print(json)
            } catch {
                print(error)
            }
        }
        }.resume()
}

我的用户名和密码被作为纯文本发送进来。必须将我的凭据编码为base64。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52488577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档