前几天做一个调用百度API进行图像识别的功能。识别图像中的文字。
var url = "http://apis.baidu.com/apistore/idlocr/ocr"
var httpArg = "fromdevice=pc&clientip=10.10.10.0&detecttype=LocateRecognize&languagetype=CHN_ENG&imagetype=1&image=/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDABMNDxEPDBMREBEWFRMXHTAfHRsbHTsqLSMwRj5KSUU+RENNV29eTVJpU0NEYYRiaXN3fX59S12Jkoh5kW96fXj/2wBDARUWFh0ZHTkfHzl4UERQeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHj/wAARCAAfACEDAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAQDBQb/xAAjEAACAgICAgEFAAAAAAAAAAABAgADBBESIRMxBSIyQXGB/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/APawEBAQEBAgy8i8ZTVV3UY6V1eU2XoWDDZB19S646Gz39w9fkKsW1r8Wm2yo1PYis1be0JG9H9QNYCAgc35Cl3yuVuJZl0cB41rZQa32dt2y6OuOiOxo61vsLcVblxaVyXD3hFFjL6La7I/sDWAgICAgICB/9k="
request(url, httpArg: httpArg)
func request(httpUrl: String, httpArg: String) {
var req = NSMutableURLRequest(URL: NSURL(string: httpUrl)!)
req.timeoutInterval = 6
req.HTTPMethod = "POST"
req.addValue("您自己的apikey", forHTTPHeaderField: "apikey")
req.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
req.HTTPBody = NSString(string: httpArg).dataUsingEncoding(NSUTF8StringEncoding)
NSURLConnection.sendAsynchronousRequest(req, queue: NSOperationQueue.mainQueue()) {
(response, data, error) -> Void in
let res = response as! NSHTTPURLResponse
println(res.statusCode)
if let e = error{
println("请求失败")
}
if let d = data {
var content = NSString(data: d, encoding: NSUTF8StringEncoding)
println(content)
}
}
}
但是换成自己的图片的时候一直调用失败!
总结出的原因是base64的字符串在URL中,“+”会被自动转成空格。
克服这个问题,需要做base64后的字符串urlencode处理!
本文讲述了在使用Base64编码的字符串作为URL参数时遇到的问题,即‘+’号被转换为空格导致请求失败。通过将Base64编码后的字符串进行URL编码(urlencode)可以解决这个问题,确保请求成功。
1517

被折叠的 条评论
为什么被折叠?



