gpt4 book ai didi

iOS - Swift - 使用 Alamofire 的必应图像搜索 API 身份验证

转载 作者:行者123 更新时间:2023-11-29 01:50:50 24 4
gpt4 key购买 nike

尝试使用 Bing API 在 Swift 中检索图像,但没有成功。从我在 stackoverflow 以及 Bing API 文档(https://onedrive.live.com/view.aspx?resid=9C9479871FBFA822!112&app=Word&authkey=!ANNnJQREB0kDC04)中收集到的其他类似问题中,您必须将请求发送到 api,并将 Authorization header 设置为 Bing API 的 base64 编码版本帐户 key 。所以我尝试了以下方法:

let url = NSURL(string: Settings.bingImageApi + "&Query=" + keyword)!
let plainText = bingAPIKey.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
let base64 = plainText!.base64EncodedStringWithOptions(nil)

let manager = Alamofire.Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = [
"Authorization": "Basic \(base64)"
]

manager
.request(.POST, url, parameters: nil, encoding: .JSON)
.responseJSON { (request, response, data, error) -> Void in
println(response)
}

println(error) 语句产生以下内容:

{ status code: 401, headers {
"Access-Control-Allow-Credentials" = false;
"Access-Control-Allow-Headers" = "Content-Type, Authorization, DataServiceVersion, MaxDataServiceVersion";
"Access-Control-Allow-Methods" = "GET, POST, PUT, DELETE, OPTIONS";
"Access-Control-Allow-Origin" = "*";
"Access-Control-Expose-Headers" = "DataServiceVersion, MaxDataServiceVersion";
"Access-Control-Max-Age" = 604800;
"Content-Length" = 91;
Date = "Thu, 16 Jul 2015 00:38:34 GMT";
Server = "Microsoft-IIS/8.0";
"Www-Authenticate" = "Basic Realm=\"\"";
"X-Content-Type-Options" = nosniff;
"X-Powered-By" = "ASP.NET";
}

授权通常需要用户名和密码,但在这种情况下只需要密码,而用户名可以为空。我将如何去指定密码值?我认为问题出在那个或 base64 编码有问题。

最佳答案

明白了。需要对整个用户名:密码 字符串进行编码,而不仅仅是一个值或另一个。在我修复了 400 错误(错误请求)之后,我通过在查询字符串周围添加单引号解决了这个问题。最终代码如下所示:

let keyword = "'\(currentSearchTerm)'".stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())!
let url = NSURL(string: Settings.bingImageApi + "&Query=" + keyword)!

let credentials = ":\(Settings.bingApiKey)"
let plainText = credentials.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
let base64 = plainText!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))

let manager = Alamofire.Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = [
"Authorization": "Basic \(base64)"
]

manager
.request(.POST, url, parameters: nil, encoding: .JSON)
.responseJSON { (request, response, data, error) -> Void in
println(data)
}

关于iOS - Swift - 使用 Alamofire 的必应图像搜索 API 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31443285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com