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 命令中,您定义了表单字段file
、mode
和apikey
,您需要将它们编码为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。 mode
和 apikey
字段需要像文件一样添加 appendBodyPart,看起来它需要一个 NSData,因此您需要将字符串编码为 UTF-8 或其他编码。但我会让 Alamofire 专家解决这个问题。以上是关于Swift 中的 cURL 等效项 - iOS的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 cacert 文件在 Powershell (Invoke-WebRequest) 中执行 cUrl 等效项?