swift - 在 Swift 中通过多个重定向自动从 HTTP Post 请求更新 Cookie

标签 swift post cookies httprequest alamofire

我正在尝试从抓取的网站数据创建登录 API(我已获得这样做的许可)。目前网站的登录执行具有多个重定向的 POST 请求。在每次重定向时,响应 cookie 似乎总是包含一个新的 SET-COOKIE 以及一些值,即 session ID。

我已经能够在 Hurtl.it 网站上以及通过 Postman 和 Paw 等程序完美地完成请求,但除非我明确输入返回的 cookie,否则我无法通过 Alamofire 或 NSURLSession 正确完成请求来自 Postman 或 Paw,其中包含 session ID 以及重定向期间设置的其他 cookie。

我想知道是否可以将 cookie 设置为在 Swift 重定向期间自动更新并发送更新的 cookie。

这是当前正在使用的 Alamofire 代码,它返回正确的输出,但仅针对输入的 session ID/cookie,因此即使我更改用户名/密码,它仍然会输出结果,就好像它们从未需要更改一样:

func sendRequestRequest() {

    // Add Headers
    let headers = [
        "Cookie":"Cookie string taken explicitly from Paw or Postman",
        "Content-Type":"application/x-www-form-urlencoded",
        ]

    // Form URL-Encoded Body
    let body = [
        "inputEnterpriseId":"username",
        "password":"password",
        "queryString":"null",
        "BTN_LOGIN":"Login",
        ]

    // Fetch Request
    Alamofire.request(.POST, "url", headers: headers, parameters: body, encoding: .URL)
        .validate(statusCode: 200..<300)
        .responseString { response in
            if (response.result.error == nil) {
                debugPrint("HTTP Response Body: \(response.result.value)")
            }
            else {
                debugPrint("HTTP Request failed: \(response.result.error)")
            }
    }
}

如果有人需要更多信息,请告诉我。非常感谢您的帮助!

最佳答案

我找到了答案,但最终使用 NSURLSession 来做到这一点。解决我的 cookie 问题的部分是:

            if let httpResponse = response as? NSHTTPURLResponse, let fields = httpResponse.allHeaderFields as? [String : String] {
            let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(fields, forURL: response!.URL!)
            NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookies(cookies, forURL: response!.URL!, mainDocumentURL: nil)
            for cookie in cookies {
                var cookieProperties = [String: AnyObject]()
                cookieProperties[NSHTTPCookieName] = cookie.name
                cookieProperties[NSHTTPCookieValue] = cookie.value
                cookieProperties[NSHTTPCookieDomain] = cookie.domain
                cookieProperties[NSHTTPCookiePath] = cookie.path
                cookieProperties[NSHTTPCookieVersion] = NSNumber(integer: cookie.version)
                cookieProperties[NSHTTPCookieExpires] = NSDate().dateByAddingTimeInterval(31536000)

                let newCookie = NSHTTPCookie(properties: cookieProperties)
                NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(newCookie!)

                print("name: \(cookie.name) value: \(cookie.value)")
            }

关于swift - 在 Swift 中通过多个重定向自动从 HTTP Post 请求更新 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39151071/

相关文章:

ios - 快速将公历日期选择器转换为波斯日期选择器?

ajax - React/Redux 下载文件

javascript - 在 ios safari 和 chrome 中使用客户端 javascript 设置安全 cookie

cookies - 关闭浏览器时清除 cookie

jQuery.post() 里面的 jQuery.post()

javascript - Firefox session 不会自动删除

ios - 将应用程序发布到 AppStore Xamarin.iOS 构建时出错

swift - Swift 中颜色和 UIColor 的区别?

ios - 自动调整 anchor 大小不会将 subview 设置为角点

ASP.NET : Hide Querystring in URL