Я новичок в iOS Application Coding.У меня быстрая версия 4.2.1 и xcode 10.1 и настройка alamofire 4.Мне нужно вызвать службу API остальных, которая имеет два параметра (1) принимает изображение в двоичном заголовке потока (2), и службе требуется аутентификация типа: ssl.PROTOCOL_TLSv1, API возвращает результат в формате json.Я не могу преобразовать изображение в двоичный формат и добавить заголовки.Я застрял с этим в течение последних нескольких дней, и любая помощь будет оценена. Я смог добиться этого в Python с кодом ниже
try:
import httplib # Python 2
except:
import http.client as httplib # Python 3
headers = {"Content-type": "application/json",
"X-Access-Token": “MyToken”}
conn = httplib.HTTPSConnection(“baserestapiurl”,
context=ssl.SSLContext(ssl.PROTOCOL_TLSv1))
image_data = base64.b64encode(open(“Image from a local
folder”,"rb").read()).decode()
params = json.dumps({"image": image_data})
conn.request("POST", “endpoint1”, params, headers)
response = conn.getresponse()
result = response.read()
print("Detection Results = " + str(result))
У меня есть проект xcode, который захватывает изображение и класс, которыйназывается networkClient, который составляет URL для отправки в службу отдыха
Основная функция в ViewController:
`@IBAction func takeaPicture(_ sender: Any) {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.camera){
let imagepicker=UIImagePickerController();
imagepicker.delegate=self
imagepicker.sourceType=UIImagePickerController.SourceType.camera
imagepicker.allowsEditing=false
self.present(imagepicker,animated:true,completion:nil)
}
guard let urltoexecute = URL(string:"urltotheservice") else {return}
networkingClient.execute(urltoexecute,viewCapturedImage.image!){ (json,error) in
if let error = error {
self.textView.text = error.localizedDescription
} else if let json = json {
self.textView.text = json.description
}
}
}
`
NetworkingClientClass:
import Foundation
import Alamofire
import UIKit
class NetworkingClient {
typealias WebServiceResponse = ([[String: Any]]?,Error?) -> Void
func execute(_ url:URL,_ viewCapturedImage : UIImage, completion: @escaping
WebServiceResponse){
var urlrequest=URLRequest(url: url)
urlrequest.httpMethod = "POST"
Alamofire.request(urlrequest).validate().responseJSON { response in
if let error = response.error {
completion(nil,error)
} else if let jsonArray = response.result.value as? [[String: Any]]{
completion(jsonArray,nil)
}
}
}
}