iOS приложение для вызова API с заголовками, публикацией, аутентификацией, изображением - PullRequest
0 голосов
/ 20 февраля 2019

Я новичок в 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)
        }
      }
    }
  }
...