我有以下 curl 命令,它在命令行上运行良好,但我无法在 Swift 中编写它。
curl -u web:web -k -i -d '{ "email":"fb@test.com","fbId":"FBXXXFB","accessToken":"accessNow","familyName":"FamName","givenName":"given"}' -H "Content-Type: application/json;charset=UTF-8" -X POST 'https://xweb.test.herokuapp.com/olweb/auth/login/fb'
当我尝试在 Alamofire 中翻译它时,我总是从服务器收到错误。所以我假设身份验证工作正常但参数不正确,因为我需要向服务器发送 5 个参数。 我该怎么做呢?
这是代码片段:
func loginWithFacebook(loginEmail: String, facebookId: String, accessToken: String,familyName: String, givenName: String, completionHandler: (AnyObject?, NSError?) -> ()) {
//Basic HTTP auth
let user = "web"
let password = "web"
// let headers = ["Authorization": "Basic \(base64Credentials)"] not working
// let headers = ["web": "web"] not working
//example for a nested array query
let parameters = [
"loginEmail": loginEmail,
"facebookId": facebookId,
"accessToken": accessToken,
"familyName": familyName,
"givenName": givenName
]
Alamofire.request(
.POST,
loginWithFacebook,
parameters: parameters
)
.responseJSON { response in
switch response.result {
case .Success(let value):
completionHandler(value, nil)
case .Failure(let error):
completionHandler(nil, error)
}
}
.authenticate(user: user, password: password)
}
我按以下方式调用此方法:
self.restApi.loginWithFacebook(email, facebookId: facebookId, accessToken: accessToken, familyName: familyName, givenName: firstName) {responseObject, error in
print("responseobject printed loginUserWithFacebook() ")
print(responseObject)
print("error printed")
print(error)
//get the JSON object
let response = responseObject as? [String:AnyObject]
print("response")
print(response)
//parse down the first layer of JSON object which is an NSDictionary (sometimes it is [AnyObject] )
if let result = response!["result"] as? [String: AnyObject]
{
print("self.result.count after calling loginUserWithFacebook()")
print(result.count)
print(result)
// self.getProfileFromUser()
}
}
服务器的错误响应:
responseobject printed loginUserWithFacebook()
Optional({
info = "Required fields missing.";
result = {
};
})
最佳答案
在您的 cURL 请求中,正文是 JSON。但是,您的 Alamofire 代码将使用 URL 编码参数发送请求。尝试改用 JSON:
Alamofire.request(
.POST,
loginWithFacebook,
parameters: parameters,
encoding: .JSON
)
另请注意,您的 cURL 请求使用键 email
和 fbId
,但您的 Alamofire 代码使用 loginEmail
和 facebookId
。如果您的服务器不支持两者,您可能还需要更改它们。
关于swift - 如何使用 Alamofire 在 Swift 中编写 curl 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38873967/