Ich musste mit HttpURLConnection gleichzeitig eine Verbindung zu einer Website aus mehreren Threads herstellen, aber für jede Verbindung verschiedene Cookies verwenden. Da Java nur das Setzen eines globalen CookieManagers unterstützt, habe ich den folgenden Hack implementiert.
Anstatt CookieHandler.setDefault(new CookieManager())
aufzurufen, habe ich eine benutzerdefinierte CookieHandler
implementiert, die für jeden Thread eine andere CookieStore
-Instanz verwendet, die nach jeder Anfrage gelöscht wird.
Ich habe die Klasse SessionCookieManager
basierend auf dem Quellcode von CookieManager
.
Die Membervariable cookieJar
wurde entfernt und ihre Verwendung wurde durch getCookieStore()
ersetzt.
Der folgende Code wurde hinzugefügt:
%Vor% Vor der ersten Anfrage wird der benutzerdefinierte CookieManager
als globaler Standard CookieHandler
:
Nach jeder Anfrage wird die CookieStore
des aktuellen Threads gelöscht:
Eine Möglichkeit wäre, den Cookie-Header direkt zu verwenden, anstatt den Cookie zu senden. Siehe Cookie-Header hier: Ссылка , was Sie können ändere jeden Anruf.
%Vor%Tags und Links java cookies httpurlconnection cookiestore