gpt4 book ai didi

swift - HTTP GET 请求时出现 Cloudant 函数子句错误

转载 作者:行者123 更新时间:2023-11-30 12:52:36 26 4
gpt4 key购买 nike

这是我的第一个问题,我在编码方面没有太多经验,所以请耐心等待。谢谢!

我在 Bluemix Cloudant 帐户中使用具有不同特征的不同汽车定义了一些文档。我想从 IOS Swift 前端应用程序获取一个条目。

这是一个示例查询网址:https://$ACCOUNT-bluemix.cloudant.com/cars/_design/car_index/_search/car_index_name?q=size:small

现在的问题是:如果我在浏览器中使用这个 url,我会得到 JSON 格式的正确结果,没有任何错误。但是,如果应用程序发出请求,则会记录函数子句错误,而请求本身似乎是成功的。

我读到,function_clause 错误是由 Cloudant 用于索引文档的 Javascript 中的一些错误引起的。我使用的 Javascript 与 Cloudant 在教程中所述完全相同。

有谁知道为什么它在浏览器中有效但在应用程序中无效?非常感谢您的帮助!

这是所有代码:

这是我在 swift 中用来发出请求的方法:

    func databaseRequest(size: String, interior: String, fuel: String) {
let baseURL = "https://$ACCOUNT-bluemix.cloudant.com/cars/_design/car_index/_search/car_index_name?q="
let queryURL = "size:\(size)"
let completeURL: String = baseURL + queryURL

let completeURLModified = completeURL.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
let requestURL = URL(string: completeURLModified!)

var request = URLRequest(url: requestURL!)
request.httpMethod = "GET"
request.setValue("Basic \(credentials)", forHTTPHeaderField: "Authorization")

let task = URLSession.shared.dataTask(with: request){data, response, error in

guard error == nil else{
print("There was an error:", error as Any)
return
}

guard data == data else{
print("Data is empty")
return
}

let jsonResponse = try! JSONSerialization.jsonObject(with: data!, options: [])
print("This is JSON Response", jsonResponse)

}; task.resume()
}

这是 JSON 答案的响应:

    This is JSON Response {
error = "unknown_error";
reason = "function_clause";
ref = 1944801346;
}

http header 中的其余日志(如果有帮助):

    Optional(<NSHTTPURLResponse: 0x6080000349c0> { URL: https://$ACCOUNT-bluemix.cloudant.com/cars/_design/car_index/_search/car_index_name?q=size:small } { status code: 500, headers {
"Cache-Control" = "must-revalidate";
"Content-Length" = 70;
"Content-Type" = "application/json";
Date = "Thu, 24 Nov 2016 04:41:03 GMT";
Server = "CouchDB/2.0.0 (Erlang OTP/17)";
"Strict-Transport-Security" = "max-age=31536000";
Via = "1.1 lb1.bm-cc-dal-01 (Glum/1.31.3)";
"X-Cloudant-Backend" = "bm-cc-dal-01";
"X-Content-Type-Options" = nosniff;
"X-Couch-Request-ID" = 51e5e0b5e1;
"X-Couch-Stack-Hash" = 1944801346;
"X-CouchDB-Body-Time" = 0;

最后但并非最不重要的一点是我在 Cloudant 的设计文档中用作索引的 Javascript 文件:

   function (doc) {
index("name", doc.name, {"store": true});
if (doc.fuel){ index("fuel", doc.fuel, {"store": true});}
if (doc.interior){ index("interior", doc.interior, {"store": true});}
if (doc.size){index("size", doc.size, {"store": true});
}}

最佳答案

我认为此错误是由于 cloudant 尝试解码您传递为 \(credentials) 的任何内容所致。作为 base64 编码的字符串。如果\(credentials)不是有效的 base64 编码字符串(例如包含 a-zA-Z0-9+/= 以外的字符),那么我的猜测是 cloudant 的 base64 解码函数失败,并显示以上错误。

您需要确保 \(credentials)是字符串 <your_username>:<your_password>编码正确。例如。如果您的用户名是john您的密码是doe ,然后\(credentials)应该是am9objpkb2U= .

关于swift - HTTP GET 请求时出现 Cloudant 函数子句错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40778637/

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