Swift 中的 cURL 等效项 - iOS

Posted

技术标签:

【中文标题】Swift 中的 cURL 等效项 - iOS【英文标题】:cURL equivalent in Swift - iOS 【发布时间】:2015-08-05 07:27:19 【问题描述】:

我尝试了不同的方法来创建这个 cURL 请求的 swift 等价物,但我无法让它工作。

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

相应的代码贴在下面。

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()
            
        

)

如果我得到回应,我会很高兴。

【问题讨论】:

【参考方案1】:

在 curl 命令中,您定义了表单字段filemodeapikey,您需要将它们编码为multipart/form-data 的形式并将其放入HTTPBody。一些快速的谷歌搜索显示库SRWebClient(以及许多其他)将帮助您提出此类请求。

【讨论】:

你搜索了什么来找到这个库?因为这个库不能在 swift 2.0 中运行,所以我可以搜索另一个使用 swift 2.0 的库。 我搜索了“multipart/form-data”。请注意,您也可以使用 Objective-C 库,其中有很多。大多数 HTTP 请求库都能够做到这一点 - 如果他们说他们支持文件上传/发送,这就是完成的方式。 而且,大多数库会完全为您设置NSURLRequest(因此,例如,您不会得到必须分配给@987654331的NSData返回@)。 我正在尝试使用 Alamofire,但我无法让它工作,因为这是我第一次使用 api。你知道如何用 Alamofire 做到这一点吗? ***.com/questions/31834704/… 我以前从未听说过 Alamofire,但查看它的 Github 页面,我发现自述文件中有一个有趣的部分,名为 Uploading MultipartFormData。 modeapikey 字段需要像文件一样添加 appendBodyPart,看起来它需要一个 NSData,因此您需要将字符串编码为 UTF-8 或其他编码。但我会让 Alamofire 专家解决这个问题。

以上是关于Swift 中的 cURL 等效项 - iOS的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 中的 cURL 等效项?

Swift 中的 Android setTag 等效项

如何使用 cacert 文件在 Powershell (Invoke-WebRequest) 中执行 cUrl 等效项?

@protocol(DelegateType) 的 Swift 等效项

iOS8 中的 invalidateLayout 等效项

indexAtPosition、urlRequest.url!.isEqual 的 swift 3 等效项