我正在开发一款 iOS 应用,它使用 Google Translate API 将日语句子翻译成英语。
我可以使用 curl
命令从 API 获取翻译后的数据,但现在我无法使用 Swift 获取数据。
以下是我使用的curl
命令。
curl -X POST \
> https://XXXXX.appspot.com/api/translate \
> -H 'Postman-Token: XXXXX' \
> -H 'cache-control: no-cache' \
> -H 'content-type: multipart/form-data; boundary=----XXXXX' \
> -F 'text=私はあなたが好きです。' \
> -F target_lang=en \
> -F text_lang=ja
但是,下面的 swift 代码在 result
中只有 nil
。
let reqB: [String:Any] = ["text": text, "target_lang": "en", "text_lang": "ja"]
let reqBody = try? JSONSerialization.data(withJSONObject: reqB)
guard let reqUrl = URL(string: "https://XXXXX.appspot.com/api/translate") else {
return
}
var req = URLRequest(url: reqUrl)
req.httpMethod = "POST"
req.httpBody = reqBody
req.setValue("XXXXX", forHTTPHeaderField: "Postman-Token")
req.setValue("no-cache", forHTTPHeaderField: "cache-control")
req.setValue("multipart/form-data; boundary=----XXXXX", forHTTPHeaderField: "Content-Type")
let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main)
let task = session.dataTask(with: req, completionHandler: {
(data , response ,error) in
session.finishTasksAndInvalidate()
谁能帮帮我?
最佳答案
我通过 Alamofire4 解决了这个问题。 看来“multipartFormData”是这个问题的关键。
let reqUrl = "XXX"
let originalText = sendingText.data(using: .utf8)!
let targetLang = "en".data(using: .utf8)!
let textLang = "ja".data(using: .utf8)!
Alamofire.upload(
multipartFormData: { multipartFormData in
multipartFormData.append(originalText, withName: "text", mimeType: "text/plain")
multipartFormData.append(targetLang, withName: "target_lang", mimeType: "text/plain")
multipartFormData.append(textLang, withName: "text_lang", mimeType: "text/plain")
}, to: reqUrl) { (encodingResult) in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
if !response.result.isSuccess {
print("# ERROR")
} else {
print("# SUCCESS")
if let json = response.result.value as? [String: Any], let translatedText = json["translated_text"] as? String {
print(translatedText)
}
}
case .failure(let encodingError):
print(encodingError)
}
}
关于swift - 来自 swift 的 Appspot.com API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53202224/