我想知道如何使用 REST API 请求 POST。 (Swift)
I want to know how to request POST using REST API. (Swift)
我想根据下图使用 http post 接收令牌。
我把它写得像底层代码,但效果不佳。我该怎么办?
func login() {
let username = "TestID"
let password = "TestPW"
let loginString = "\(username):\(password)"
guard let loginData = loginString.data(using: String.Encoding.utf8) else {
return
}
let base64LoginString = loginData.base64EncodedString()
let param = "id=0000&password=1234&password2=1234&grantType=password"
let paramData = param.data(using: .utf8)
var request = URLRequest(url: URL(string: "https://TestUrl.com")!)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")
request.setValue(String(paramData!.count), forHTTPHeaderField: "Content-Length")
request.httpBody = paramData
let session = URLSession.shared
let task = session.dataTask(with: request, completionHandler: { data, response, error -> Void in
print(response!)
do {
let json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, AnyObject>
print(json)
} catch {
print("error")
}
})
task.resume()
}
根据 API 的图像,您发送的 Authentication
header 似乎正确。然而,似乎 body 数据预期为 JSON object:
{
"id": 0000,
"password": 1234,
"password2": 1234,
"gratType": "password"
}
所以你需要创建一个Codable
结构:
struct LoginData: Codable {
let id: Int
let password: Int
let password2: Int
let gratType: String
}
然后将其转换为 JSON:
let loginData = LoginData(id: 0, password: 1234, password2: 1234, gratType: "password")
request.httpBody = try JSONEncoder().encode(loginData)
请注意,我根据您的示例创建了这个结构,它将 id
、password
和 password2
字段显示为数字字段(不是字符串),这有点奇怪我,我希望至少密码字段是字符串。 gratType
也可能拼写错误(应该是 grantType
?)。但这是您可以稍后调整的内容。
我想根据下图使用 http post 接收令牌。 我把它写得像底层代码,但效果不佳。我该怎么办?
func login() {
let username = "TestID"
let password = "TestPW"
let loginString = "\(username):\(password)"
guard let loginData = loginString.data(using: String.Encoding.utf8) else {
return
}
let base64LoginString = loginData.base64EncodedString()
let param = "id=0000&password=1234&password2=1234&grantType=password"
let paramData = param.data(using: .utf8)
var request = URLRequest(url: URL(string: "https://TestUrl.com")!)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")
request.setValue(String(paramData!.count), forHTTPHeaderField: "Content-Length")
request.httpBody = paramData
let session = URLSession.shared
let task = session.dataTask(with: request, completionHandler: { data, response, error -> Void in
print(response!)
do {
let json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, AnyObject>
print(json)
} catch {
print("error")
}
})
task.resume()
}
根据 API 的图像,您发送的 Authentication
header 似乎正确。然而,似乎 body 数据预期为 JSON object:
{
"id": 0000,
"password": 1234,
"password2": 1234,
"gratType": "password"
}
所以你需要创建一个Codable
结构:
struct LoginData: Codable {
let id: Int
let password: Int
let password2: Int
let gratType: String
}
然后将其转换为 JSON:
let loginData = LoginData(id: 0, password: 1234, password2: 1234, gratType: "password")
request.httpBody = try JSONEncoder().encode(loginData)
请注意,我根据您的示例创建了这个结构,它将 id
、password
和 password2
字段显示为数字字段(不是字符串),这有点奇怪我,我希望至少密码字段是字符串。 gratType
也可能拼写错误(应该是 grantType
?)。但这是您可以稍后调整的内容。