मुझे URLSession का अधिक अनुभव नहीं है, लेकिन मैं एक POST कॉल करने का प्रयास कर रहा हूं, और मुझे दो अलग-अलग त्रुटियां मिलती रहती हैं।

यहाँ मेरा कार्य है:

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। मैंने वह कोड जोड़ा जो उन्होंने जोड़ने के लिए कहा था, लेकिन मुझे वही त्रुटियां मिलीं।

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; 
}

अगली त्रुटि जो मुझे मिलती है वह है:

<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 देने का एकमात्र कारण यह है कि यह उपयोगकर्ता नाम/पासवर्ड में सही ढंग से नहीं पढ़ रहा है? मुझे 100% यकीन नहीं है कि हेडर शीर्षक "उपयोगकर्ता नाम" और "पासवर्ड" सही हैं। वास्तविक उपयोगकर्ता नाम और पासवर्ड निश्चित रूप से सही हैं।

0
stacks 25 सितंबर 2018, 02:20

1 उत्तर

सबसे बढ़िया उत्तर

इस समस्या में भाग लेने वाले लोगों के लिए:

मुझे पता चला कि क्या गलत था:

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()
}

मेरा उपयोगकर्ता नाम और पासवर्ड सादे पाठ के रूप में भेजा जा रहा था। मेरे क्रेडेंशियल्स को बेस 64 में एन्कोड करना पड़ा।

0
stacks 25 सितंबर 2018, 20:59