我现在面临一个问题,因为我已经使用了一个非常特殊的API,它需要一个JSON对象作为GET请求中的主体。我认为这是主要问题
我尝试使用ParameterEncoding自定义我的编码,感谢Alamofire文档和Stack Overflow中提供的所有帮助,但仍然没有成功。
当我使用Postman或在我的终端中使用curl提出请求时,没有问题但是当我使用Alamofire快速开发时,我得到内部错误500或者我的响应中没有传递任何内容(当我在我的请求函数中设置我的参数时关键字编码:JSONEncoding.default)。
这是卷曲的例子:
curl -X GET https://blih.epitech.eu/user/repositories -H'Content-Type:application / json'-d'{“user”:account,“signature”:password}'
以下是我的代码示例:
/// swift 5
let userString = #"{"user":"\#(account)","signature":"\#(signaturePassword)"}"#
let urlString = "https://blih.epitech.eu/repositories"
Alamofire.request(urlString, method: .get, parameters: [:], encoding: JSONStringArrayEncoding.init(string: userString), headers: nil)
.responseJSON { (response) in
debugPrint(response)
}
'JSONStringArrayEncoding'是我的自定义编码的结构:
struct JSONStringArrayEncoding: ParameterEncoding {
private let myString: String
init(string: String) {
self.myString = string
}
func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
var urlRequest = try urlRequest.asURLRequest()
let data = Data(myString.utf8)
if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil {
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
}
urlRequest.httpBody = data
return urlRequest
}
}
我希望在请求成功时有一个json数组:
{
"message": "Listing successful",
"repositories": {
"aaaa": {
"uuid": "e3a6bea1-c581-5fde-a3a8",
"url": "https://blih.epitech.eu/repository/aaa"
}
}
}
但我得到一个内部错误500。
预先感谢您的帮助。
正如您所提到的那样,您的请求正在使用邮递员或终端中的卷曲。以下是我得到的结果
正如@Glenn指出的那样,使用url blih.epitech.eu/user/repositories访问浏览器的结果显示如下结果
我相信,你要求的网址有问题。
编辑:
请参见下图,了解它与卷曲一起使用的原因
尝试将您的请求发布一次并添加
content-type = application/x-www-form-urlencoded
我不确定但它可能有所帮助。
试试这个:
let url = "https://blih.epitech.eu/user/repositories"
let param = ["user":"asdfdsf",
"signature":"password"]
if let jsonData = try? JSONEncoder().encode(param) {
var request = URLRequest(url: URL(string: url)!)
request.httpMethod = HTTPMethod.post.rawValue
request.setValue("application/json; charset=UTF-8", forHTTPHeaderField: "Content-Type")
request.httpBody = jsonData
Alamofire.request(request).responseJSON {
(response) in
debugPrint(response)
}
}
OUTPUT:
{error =“坏标记”; }