La principale raison de mon problème est que le site a renvoyé un résultat 302 avec des cookies appropriés, mais je n'ai jamais eu l'occasion de l'interpréter.
Le comportement par défaut du HttpURLConnection
consiste à suivre les redirections pour moi. Cela aurait été dandy si elle a également conservé les cookies à leur retour de la première demande, mais ce n'est pas le cas. Cela a provoqué le serveur à recevoir la redirection vers le site approprié, mais perdre ses cookies montrant mon login était bon.
Pour résoudre ce problème juste besoin de cet appel au début de mon programme:
HttpURLConnection.setFollowRedirects(false);
qui permettent 302 par mon obtenir vu du code qui pourrait alors recueillir les valeurs de cookie et soumettre à nouveau une demande à la nouvelle Location
. Je ne sais pas si c'est un bug que la redirection suivante a ignoré les valeurs d'en-tête Set-Cookie
, mais si cela aurait dû ou pas, cela m'a certainement perturbé pendant un moment.
Une autre question est que le site je parfois envoyé une valeur Location
qui était relative plutôt qu'absolue, donc je devais gérer cela avec le code comme ceci:
if (!location.startsWith("http")) {
String newLocation = url.getProtocol() + "://" + url.getHost();
if (url.getPort() > 0) {
newLocation += ":" + url.getPort();
}
if (location.startsWith("/")) {
newLocation += location;
}
else {
if (!location.startsWith("/")) {
location = "/" + location;
}
newLocation += url.getPath() + location;
}
location = newLocation;
}
url = new URL(location);
Cela se fait dans une boucle qui continue d'essayer de nouvelles valeurs d'URL pendant que 302 revient sans cesse.