在Google文档(https://developers.google.com/url- shortener/v1/getting_started)中,要使用Google URL缩短器,我应该发出如下请求:
POST https://www.googleapis.com/urlshortener/v1/url 内容类型:application / json {“ longUrl”:“ http://www.google.com/ “}
POST https://www.googleapis.com/urlshortener/v1/url
内容类型:application / json
{“ longUrl”:“ http://www.google.com/ “}
他们还说,我将必须进行身份验证:
“您的应用程序发送到Google URL的每个请求都需要Shortener API向Google识别您的应用程序。有两种方法可以识别您的应用程序:使用OAuth 2.0令牌(也可以授权请求)和/或使用应用程序的API密钥。 ”
我选择了公共API密钥作为进行身份验证的方法:我为我的iOS应用创建了一个公共密钥。然后,我将以下代码用于POST(AFNetworking,使用Swift):
func getShortURL(longURL: String){ let manager = AFHTTPRequestOperationManager() let params = [ "longUrl": longURL ] manager.POST("https://www.googleapis.com/urlshortener/v1/url?key={my_key_inserted}", parameters: params, success: { (operation: AFHTTPRequestOperation!,responseObject: AnyObject!) in println("JSON: " + responseObject.description) }, failure: { (operation: AFHTTPRequestOperation!,error: NSError!) in println("Error while requesting shortened: " + error.localizedDescription) }) }
但是,我得到了日志:请求缩短时出错:请求失败:错误的请求(400)。
请告诉我如何解决。
您缺少的是为此请求设置正确的AFNetworking序列化程序。
由于Google响应使用JSON,因此您应该使用AFJSONRequestSerializer。
AFJSONRequestSerializer
manager.requestSerializer = AFJSONRequestSerializer()像这样添加:
manager.requestSerializer = AFJSONRequestSerializer()
let manager = AFHTTPRequestOperationManager() manager.requestSerializer = AFJSONRequestSerializer() let params = ["longUrl": "MYURL"] manager.POST("https://www.googleapis.com/urlshortener/v1/url?key=MYKEY", parameters: params, success: {(operation: AFHTTPRequestOperation!,responseObject: AnyObject!) in println("JSON: " + responseObject.description) }, failure: { (operation: AFHTTPRequestOperation!,error: NSError!) in println("Error while requesting shortened: " + error.localizedDescription) })