Запрос HTTP-аутентификации с помощью Campaign Monitor в Swift - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь опубликовать данные пользователя в Campaign Monitor, когда они регистрируются в моем приложении.Может кто-нибудь помочь мне добавить авторизацию в запрос.В настоящее время я получаю эту ошибку:

Необязательно ("{\" Код \ ": 50, \" Сообщение \ ": \" Должен предоставить действительный заголовок HTTP Basic Authorization \ "}")

мой код:

let parameters = [  "FirstName1": "test",
                    "SecondName": "test",
                    "email": "test@test.com"
                    ]

let clientID = "52bb93ac4d9a3f261abcda0123456789"
let url = URL(string: "https://api.createsend.com/api/v3.2/clients.json")!
var request = URLRequest(url: url)
request.httpMethod = "Post"

do {
    request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
} catch let error {
    print(error.localizedDescription)
}

// add the API Key to the request / security
request.setValue(clientID, forHTTPHeaderField: "username") // IS THIS RIGHT??

// ЭТО БЫЛО КАК Я СОЗДАЛ ПРАВИЛЬНУЮ АВТОРИЗАЦИЮ

let APIKey = "0069b38c27b3e44de0234567891011"
let listID = "5e61fde130969d561dc0234567891011"

    let url = URL(string: "https://api.createsend.com/api/v3.2/subscribers/\(listID).json")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"

    // add the API Key to the request / security
    let loginString = "\(APIKey)"
    let loginData = loginString.data(using: String.Encoding.utf8)
    let base64LoginString = loginData!.base64EncodedString()
    request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")

do {
        request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
    } catch let error {
        print(error.localizedDescription)
    }

// ПОТОМ МОЖЕТ УСТАНОВИТЬ СЕССИЮ

let session = URLSession(configuration: .default)
let task = session.dataTask(with: request) {

    (data, response, error) in

    if error != nil {
        print("Error is: \(String(describing: error))")
    }

    if let response = response {
        let nsHTTPResponse = response as! HTTPURLResponse
        let statusCode = nsHTTPResponse.statusCode
        print("status code = \(statusCode)")
    }

    if let data = data {
        let postResponse = String(data: data, encoding: .utf8)
        print("responseString = \(String(describing: postResponse))")
    }

}
task.resume()

1 Ответ

0 голосов
/ 11 октября 2018

В этой строке:

// add the API Key to the request / security
request.setValue(clientID, forHTTPHeaderField: "username") // IS THIS RIGHT??

Это не правильно, даже они сказали вам, почему.Вам нужно Basic Auth Header

Для запросов POST в Swift, как правило, необходимо установить следующее:

request.setValue("Basic " + clientID, forHTTPHeaderField: "Authorization") // is clientID your access token?

Удачи

...