邮递员GET请求的Alamofire等效项

时间:2020-04-19 22:56:11

标签: ios swift postman alamofire slim

我在一个iOS应用程序上工作,我使用“ Alamofire”进行API请求,我测试了邮递员的API(由Slim框架创建),但是我无法得到Alamofire的等效邮递员请求。

邮递员要求如下: enter image description here

我尝试如下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对邮递员的同等要求。

2 个答案:

答案 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
                }
        }

这应该有效。如果遇到问题,请随时发表评论。