2015-08-05 15 views
5

Próbowałem różnych rzeczy, aby utworzyć szybki odpowiednik tego żądania cURL, ale nie mogłem go uruchomić.ekwiwalent cURL w Swift - iOS

curl -X POST -F "[email protected]/Users/nicolas/sample.png" -F "mode=document_photo" https://api.idolondemand.com/1/api/sync/ocrdocument/v1 -F "apikey=xxx-xxx-xxx-xxx-xxx" 

Odpowiedni kod jest zamieszczony poniżej.

func getText (image: UIImage){ 

    let apiKey = "xxx-xxx-xxx-xxx-xxx" 

    let request = NSMutableURLRequest(URL: NSURL(string: "https://api.idolondemand.com/1/api/sync/ocrdocument/v1")!) 
    request.HTTPMethod = "POST" 
    request.addValue(apiKey, forHTTPHeaderField: "apikey") 
    request.addValue("document_photo", forHTTPHeaderField: "mode") 
    request.HTTPBody = UIImageJPEGRepresentation(image, 1) 

    let task = NSURLSession.sharedSession().uploadTaskWithRequest(request, fromData: UIImageJPEGRepresentation(image, 1), completionHandler: {data, response, error -> Void in 


     if let _ = data { 
      var error:NSError? = nil 
      do { 
       let jsonObject : AnyObject = try NSJSONSerialization.JSONObjectWithData(data!, options: []) 
       let json = JSON(jsonObject) 
       if let ocr_results = json["text_block"][0]["text"].string { 
        self.returnText(ocr_results) 
       } 
      } catch let error1 as NSError { 
       error = error1 
       print(error) 
      } catch { 
       fatalError() 
      } 
     } 

}) 

Byłbym szczęśliwy, gdybym otrzymał odpowiedź.

Odpowiedz

1

W poleceniu Curl, definiowania pól formularza file, mode i apikey i trzeba zakodować je w formie multipart/form-data i umieścić to w HTTPBody. Niektóre szybkie odwiedziny pokazują bibliotekę SRWebClient (spośród wielu innych), która pomoże ci w wykonaniu tego rodzaju prośby.

+0

Czego szukałeś, aby znaleźć tę bibliotekę? Ponieważ ta biblioteka nie działa w wersji 2.0, więc mogę wyszukać inną bibliotekę, która wiruje z szybkim 2.0. – NMAC427

+1

Szukałem "danych wieloczęściowych/danych formularzy". Zauważ, że możesz również użyć bibliotek Objective-C, których jest wiele. Większość bibliotek żądań HTTP jest w stanie to zrobić - jeśli mówią, że obsługują wysyłanie plików/wysyłanie, tak się to robi. – Jesper

+0

A także, większość bibliotek zajmie się całkowitym skonfigurowaniem 'NSURLRequest' (więc nie otrzymasz na przykład' NSData', które musisz przypisać do 'HTTPBody'). – Jesper