如何在alamofire中设置Cookies?

时间:2017-05-15 10:05:46

标签: ios iphone swift alamofire

如何在 Alamofire 中设置Cookie,以便每当我杀死应用并重新启动时,都会发送相同的Cookie?

4 个答案:

答案 0 :(得分:7)

Swift 5.1和Alamofire 5.0

准备您的cookie

let cookieProps = [
    HTTPCookiePropertyKey.domain: "##put your domain here##",
    HTTPCookiePropertyKey.path: "/",
    HTTPCookiePropertyKey.name: "##put your cookie key here##",
    HTTPCookiePropertyKey.value: "##put your cookie value here##"
   ]

设置您的cookie

if let cookie = HTTPCookie(properties: cookieProps) {
    AF.session.configuration.httpCookieStorage?.setCookie(cookie)
}

之后,您可以执行常规请求,cookie就会发送到服务器

Alamofire.request(
  ##URL##,
  method: ##.post or .get##,
  parameters: parameters
  ).responseString {
    response in 
    ....
}

答案 1 :(得分:4)

使用NSHTTPCookie [cookiesWithResponseHeaderFields(_:forURL :)]方法从响应中获取Cookie。

// setCookies
 func setCookies(cookies: NSHTTPCookie){
     Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: response.URL!, mainDocumentURL: nil)
 }

// getCookies
func getCookies() {
    let parameters: [String: AnyObject] = [:]

    Alamofire.request(.POST, "http://test.com/test", parameters: parameters).responseJSON { response in
        if let
            header = response.response?.allHeaderFields as? [String: String],
            URL = response.request?.URL
        {
            let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(header, forURL: URL)
            print(cookies)
        }
    }
}

斯威夫特3:

func setCookies(cookies: HTTPCookie){
    Alamofire.SessionManager.default.session.configuration.httpCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil)
}

Alamofire.request(url, method: HTTPMethod.post, parameters: parameters).responseData { (responseObject) -> Void in

                if let resposecode = responseObject.response?.statusCode {
                    if resposecode != 200 {
                        // error
                    } else {
                        // view all cookies
                        print(HTTPCookieStorage.shared.cookies)
                    }
                }
           }

答案 2 :(得分:3)

Swift 3.0

let cookies = HTTPCookie.cookies(withResponseHeaderFields: response.allHeaderFields , for: response.URL!)

Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil)

Alamofire实例是共​​享单例,因此对于所有请求,cookie都已设置。 希望它适合你。

答案 3 :(得分:1)

喜欢这个吗?

public class SocketDriver implements Serializable {

private static final Pattern BACKSLASH = Pattern.compile("\n");

public static void main(String[] args) throws Exception {

    if (args.length < 2) {
        System.err.println("Usage: SocketDriver <hostname> <port>");
        System.exit(1);
    }

    final String hostname = args[0];
    final int port = Integer.parseInt(args[1]);

    final String appName = "SocketDriver";
    final String master = "local[2]";

    final Duration batchDuration = Durations.seconds(1);
    final Duration windowDuration = Durations.seconds(30);
    final Duration slideDuration = Durations.seconds(3);
    final String checkpointDirectory = Files.createTempDirectory(appName).toString();


    SparkConf sparkConf = new SparkConf()
                                    .setAppName(appName)
                                    .setMaster(master);

    JavaStreamingContext streamingContext = new JavaStreamingContext(sparkConf, batchDuration);
    streamingContext.checkpoint(checkpointDirectory);

    JavaReceiverInputDStream<String> lines = streamingContext.socketTextStream(hostname, port, StorageLevels.MEMORY_AND_DISK_SER);

    JavaDStream<String> words = lines.flatMap(word -> Arrays.asList(BACKSLASH.split(word)).iterator());

    words.window(windowDuration, slideDuration).foreachRDD((VoidFunction<JavaRDD<String>>)
            rdd -> rdd.foreach((VoidFunction<String>)
                    line -> {
                        double bytes = 0;
                        int sum = 0;
                        double frequency = 0.0;
                        sum += 1;
                        bytes += line.getBytes().length;
                        frequency += bytes / sum;

                        System.out.println("windowDuration: " + windowDuration.milliseconds() / 1000 + " seconds " + " : " + "slideDuration: " + slideDuration.milliseconds() / 1000 + " seconds " + " : " +
                                "total messages : " + sum + " total bytes : " + bytes + " frequency : " + frequency);
                    })
    );

    words.countByWindow(windowDuration, slideDuration).print();



    streamingContext.start();
    streamingContext.awaitTerminationOrTimeout(60000);
    streamingContext.stop();
 }


}