Java HTTPUrlConnection renvoie 500 code d'état
Je vais essayer d'OBTENIR une url à l'aide de HTTPUrlConnection, cependant, je suis toujours un 500 code, mais quand je tente d'accéder à la même url à partir du navigateur ou de l'utilisation de curl, il fonctionne très bien!
C'est le code
try{
URL url = new URL("theurl");
HttpURLConnection httpcon = (HttpURLConnection) url.openConnection();
httpcon.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
httpcon.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:14.0) Gecko/20100101 Firefox/14.0.1");
System.out.println(httpcon.getHeaderFields());
}catch (Exception e) {
System.out.println("exception "+e);
}
Lorsque j'imprime le headerfields, il affiche le code 500.. quand je change l'URL à autre chose comme google.com il fonctionne très bien. Mais je ne comprends pas pourquoi cela ne fonctionne pas ici, mais il fonctionne très bien sur le navigateur et avec curl.
Toute aide serait très appréciée..
Merci,
- 500 est pour erreur interne du serveur
- quoi de
theurl
que vous avez essayé ? - J'ai essayé rassd.com/1-23544.htm
Vous devez vous connecter pour publier un commentaire.
C'est surtout produit en raison de l'encodage.
Si vous utilisez le navigateur OK, mais 500 ( erreur interne du serveur ) dans votre programme,c'est parce que les navigateurs ont un très sophistiqué code en ce qui concerne les jeux de caractères et des types de contenu.
Voici mon code et il fonctionne dans le cas de ISO8859_1 comme jeu de caractères et la langue anglaise.
et dans le programme principal , de l'appeler comme ceci:
Le code de statut de 500 suggère que le code au serveur web ont été écrasé .Utilisation HttpURLConnection#getErrorStream() pour obtenir plus d'idée de l'erreur. Reportez-vous Le Code D'État Http 500
Je suis tombé sur le problème de "l'URL fonctionne dans le navigateur, mais quand je fais http-get en java, j'ai une Erreur 500".
Dans mon cas, le problème était que le http-get a fini dans l'infini de redirection en boucle entre le /par défaut.aspx et /login.aspx
Ce qui se passait était: Le serveur sert un cookie et con.getResponseCode() uniquement utilisé l'une des parties. Les données du cookie dans l'en-tête ressemblait à ceci:
De sorte que le serveur lors de la réception d'un tiers seulement des données nécessaires n'ai pas compris: Vous êtes connecté! Pas d'attente, vous devez vous connecter. Non, vous êtes connecté, ...
Pour contourner l'infini redirection en boucle, j'ai dû rechercher manuellement pour re-diriger et manuellement analyser l'en-tête de "Set-cookie" entrées.
Avec ce code, l'analyse du cookie, si nous obtenons une redirection dans la responseCode:
Assurez-vous que votre connexion permet de suivre les redirections - c'est l'une des raisons possibles pour expliquer la différence de comportement entre votre connexion et le navigateur (permet de redirection par défaut).
Il devrait être de retour code 3xx, mais il y a peut-être quelque chose d'autre, quelque part, que les modifications apportées à 500 pour votre connexion.
Dans mon cas, il s'est avéré que le serveur renvoie toujours HTTP/1.1 500 (dans le Navigateur comme en Java) pour la page que je voulais accès, mais fournit le contenu d'une page web néanmoins.
Un homme accéder à la page via le Navigateur n'a tout simplement pas d'avis, car il va voir la page et pas de message d'erreur, en Java, j'ai eu à lire le flux d'erreur au lieu de le flux d'entrée (merci @Muse).
Je n'ai aucune idée pourquoi, mais. Peut-être quelque obscure façon de garder les Robots de sortir.
C'est une vieille question, mais j'ai eu le même problème et résolu de cette façon.
Cela peut aider les autres est la même situation.
Dans mon cas, j'ai été le développement du système sur l'environnement local, et chaque chose a bien fonctionné quand j'ai vérifié mon Api Rest de navigateur, mais j'ai eu tout le temps jeté erreur HTTP 500 dans mon système Android.
Le problème, c'est quand vous travaillez sur Android, il travaille sur la VM (Machine Virtuelle), qui dit cela signifie que votre ordinateur local pare-feu peut empêcher votre Machine Virtuelle d'accéder à l'URL local (adresse IP).
Vous avez besoin simplement de permettre à votre ordinateur pare-feu. La même chose s'applique si vous tentez d'accéder au système à partir à côté de votre réseau.
J'ai fait face à la même question, et notre problème était il y a un symbole spécial dans l'une des valeurs de paramètre. Nous l'avons fixé en utilisant
URLEncoder.encode(String, String)