2010-09-02 9 views
15

J'ai des requêtes basées sur HTML dans mon code et un type spécifique semble donner lieu à IOExceptions lors de la réception de la réponse 505 du serveur. J'ai regardé la réponse 505 avec d'autres personnes qui semblaient avoir des problèmes similaires. Apparemment, 505 signifie une incompatibilité de version HTTP, mais quand je copie la même URL de requête à n'importe quel navigateur (essayé firefox, seamonkey et Opera) il ne semble y avoir aucun problème. L'un des messages que j'ai lus suggérait que les navigateurs pourraient gérer automatiquement le problème de non-concordance de version.java.io.IOException: le serveur renvoie le code de réponse HTTP 505

J'ai essayé de creuser plus profondément en utilisant le bon outil de développement fourni avec Opera, et il semble qu'il n'y ait pas de discordance entre les deux. versions (je crois que Java utilise HTTP 1.1) et une réponse agréable 200 OK est reçue. Pourquoi est-ce que je rencontre des problèmes lorsque la même requête passe par mon code Java?

 private InputStream openURL(String urlName) throws IOException{  
    URL url = new URL(urlName); 
    URLConnection urlConnection = url.openConnection(); 
    return urlConnection.getInputStream(); 
} 

lien échantillon: http://www.uniprot.org/uniprot/?query=mnemonic%3aNUGM_HUMAN&format=tab&columns=id,entry%20name,reviewed,organism,length

Répondre

38

Il y a eu quelques problèmes dans Tomcat avec des URL contenant l'espace en elle. Pour résoudre le problème, vous devez encoder votre URL avec URLEncoder.

Exemple (notez l'espace):

String url="http://example.org/test test2/index.html"; 
String encodedURL=java.net.URLEncoder.encode(url,"UTF-8"); 
System.out.println(encodedURL); //outputs http%3A%2F%2Fexample.org%2Ftest+test2%2Findex.html 
+0

J'avais aussi le même problème avec Tomcat 7.0.8 et j'avais besoin d'encoder l'un des paramètres. Mais il y a plus: la requête a été parfaitement gérée par Tomcat si elle est faite avec Firefox! – Pragmateek

+0

Merci! J'ai eu le même problème et votre réponse a résolu mon problème. –

+3

J'ai remplacé les espaces dans mon URL avec% 20. Merci, ce numéro fixe – Chris

2

Êtes-vous derrière un proxy? Ce code fonctionne pour moi et imprime le même texte que je vois à travers un navigateur.

final URL url = new URL("http://www.uniprot.org/uniprot/?query=mnemonic%3aNUGM_HUMAN&format=tab&columns=id,entry%20name,reviewed,organism,length"); 
final URLConnection conn = url.openConnection(); 
final InputStream is = conn.getInputStream(); 
System.out.println(IOUtils.toString(is)); 

conn est une instance de HttpURLConnection

+0

Non, il n'y a pas de proxy ici, pour autant que je sache .. J'ai essayé le cas simplifié comme vous l'avez écrit ici et il semble fonctionner pour moi aussi, étrange .. Exécution du test complet pour voir si le problème persiste, mais il faut un certain temps pour voir les résultats .. Dans le cas où je reçois toujours l'exception, je vais mettre à jour le poste avec la pile trace .. – posdef

8

En tant que développeur à www.uniprot.org j'ai l'avantage de pouvoir regarder dans les journaux de demande. Dans la dernière année selon les journaux, nous n'avons pas envoyé un code de réponse 505. Dans tous les cas, nos serveurs comprennent les requêtes http 1 ainsi que le http1.1 par défaut (bien que vous n'obtiendrez pas les résultats escomptés).

Cela me fait penser qu'il y avait une sorte de corruption de données sur le chemin. Ou vous avez été affecté par une panne matérielle (récemment, nous avons eu quelques problèmes avec un commutateur et un centre de données entier;). Dans tous les cas, si vous avez des questions ou des problèmes avec uniprot.org, veuillez contacter [email protected], puis nous verrons si nous pouvons aider/résoudre le problème.

Votre extrait de code semble normal et devrait fonctionner.

Cordialement, Jerven Bolleman

+0

Salut Jerven, Merci beaucoup pour votre réponse, même si cela ajoute à ma confusion (le fait que vous n'ayez jamais envoyé de 505), il est apprécié que vous preniez votre temps pour parcourir les journaux et essayer de trouver les causes possibles. J'ai cependant envoyé un mail à helpdesk il y a quelques jours, quand j'ai commencé à rencontrer le problème et que je n'ai toujours pas reçu de réponse. Je me suis dit qu'il y avait un certain nombre de problèmes auxquels vous deviez probablement assister, alors je voulais simplement m'assurer que je pouvais faire quelque chose de ma part. :) – posdef

3

de la documentation de l'API pour la URL classe:

La classe URL ne se codait pas ou décoder des composants d'URL [... ] Il est de la responsabilité de l'appelant d'encoder tous les champs, qui doivent être échappés avant d'appeler l'URL, et de décoder tous les champs échappés, qui sont renvoyés à partir de l'URL.

donc si vous avez des espaces dans votre encode url-str avant d'appeler une nouvelle URL (URL-str)

2

@posdef J'avais même code d'erreur HTTP 505 problème. Lorsque j'ai collé l'URL que j'utilisais dans le code Java dans Firefox, Chrome a fonctionné. Mais à travers le code donnait IOException.Mais enfin je suis venu à savoir que dans la chaîne url il y avait des parenthèses '(' et ')', en les retirant cela fonctionnait donc il semble que j'avais besoin d'URLEncodeing comme des navigateurs.

+0

J'avais besoin du même code URLEncodeing (je suis confronté au même problème) –

Questions connexes