我在一个iOS应用程序上工作,我使用“ Alamofire”进行API请求,我测试了邮递员的API(由Slim框架创建),但是我无法得到Alamofire的等效邮递员请求。
我尝试如下Alamofire:
let parm = ["Password_Father": "test", "Username_Father": "test"]
let headers : HTTPHeaders = ["content-type": "application/json"]
AF.request(URL(string: "http://my.domain.com/page1/login")!,
method: .get, // also try it as post but get error 500 as postman when using post method
parameters:parm,
encoding: JSONEncoding.default,
headers: headers)
.validate(statusCode: 200..<300)
.responseJSON { response in
switch response.result
{
case .success(_) :do {
print("success")
}
case .failure(let error):
print("failure(error)",error)
break
}
}
但我收到此错误failure(error) urlRequestValidationFailed(reason: Alamofire.AFError.URLRequestValidationFailureReason.bodyDataInGETRequest)
我如何获得Alamofire对邮递员的同等要求。
答案 0 :(得分:0)
在Google之后找到this。
添加域异常很容易。您添加 NSExceptionDomains 目标的 NSAppTransportSecurity 词典的键
Info.plist
。键的值是一个字典,其中每个键为 字典是域异常。看一下以下内容 澄清示例。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>cocoacasts.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
在上面的示例中,它添加了一个子域cocoacasts.com
,并将NSExceptionAllowsInsecureHTTPLoads
设置为允许http
对该子域的请求。 post一开始就这么说。
Apple最近宣布,每个版本都提交给App Store 从1月1日开始需要启用App Transport Security 2017。
这意味着默认情况下所有通信都运行https
。如果应用程序需要http
,则需要为那些例外子域配置Info.plist
。
答案 1 :(得分:0)
正如您在问题中所述,您正在提出“ GET”请求。
GET请求不能具有消息正文。但是您仍然可以使用URL参数将数据发送到服务器。在这种情况下,您将被限制为URL的最大大小,大约为2000个字符。
解决此问题的一种方法是在请求中将URLEncoding.default
用作encoding
。
您的请求应如下:
let parm = ["Password_Father": "test", "Username_Father": "test"]
let headers : HTTPHeaders = ["content-type": "application/json"]
AF.request(URL(string: "http://my.domain.com/page1/login")!,
method: .get,
parameters:parm,
encoding: URLEncoding.default,
headers: headers)
.validate(statusCode: 200..<300)
.responseJSON { response in
switch response.result
{
case .success(_) :do {
print("success")
}
case .failure(let error):
print("failure(error)",error)
break
}
}
这应该有效。如果遇到问题,请随时发表评论。