如何在 Alamofire 中设置Cookie,以便每当我杀死应用并重新启动时,都会发送相同的Cookie?
答案 0 :(得分:7)
准备您的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();
}
}