小编典典

在Swift中使用Google API,AFNetworking缩短网址

swift

在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/ “}

他们还说,我将必须进行身份验证:

“您的应用程序发送到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)。

请告诉我如何解决。


阅读 213

收藏
2020-07-07

共1个答案

小编典典

您缺少的是为此请求设置正确的AFNetworking序列化程序。

由于Google响应使用JSON,因此您应该使用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)
    })
2020-07-07