2009-09-10 7 views
0

J'ai un problème avec cette erreur:Java appel http code de réponse de retour: 501

**Server returned HTTP response code: 501 for URL: http://dev1:8080/data/xml/01423_01.xml**  

Voir ce code:

private static Map sendRequest(String hostName, String serviceName) throws Exception { 
     Map assets = null; 
     HttpURLConnection connection = null; 

     Authenticator.setDefault(new Authenticator()); 


     URL serviceURL = new URL(hostName + "/" + serviceName); 
     connection = (HttpURLConnection)serviceURL.openConnection(); 
     connection.setRequestMethod("GET"); 
     ClientHttpRequest postRequest = new ClientHttpRequest(connection); 

     InputStream input = null; 


     /* 

     At line input = postRequest.post(); I get the following error 
     Server returned HTTP response code: 501 for URL: http://dev1:8080/data/xml/01423_01.xml 

     Yet if I enter that url in my browser it opens up fine. 
     Is this a common problem? Is there some type of content type I need to set? 
     */ 
     input = postRequest.post(); 
     connection.disconnect(); 
     return assets; 
    } 
+0

Qu'est-ce qu'un ClientHttpRequest ?? Est-ce une API Sun Java ?? – vpram86

Répondre

3

A signifie « non mis en œuvre » réponse 501, et est généralement pris pour signifier que le serveur n'a pas compris la méthode HTTP que vous avez utilisée (par exemple, obtenir, poster, etc).

Je ne reconnais pas ClientHttpRequest, mais vous avez une ligne qui dit

connection.setRequestMethod("GET"); 

puis une ligne qui dit

input = postRequest.post(); 

Je ne suis pas sûr de ce post() ne fait, mais cela signifie-t-il envoyer une demande POST? Si c'est le cas, cela contredit le GET spécifié dans la première ligne. Dans tous les cas, le serveur dit qu'il ne fait pas partie de la méthode GET ou POST, quelle que soit celle que votre code envoie réellement. Vous devez savoir quelle méthode le serveur prend en charge pour cette URL et l'utiliser.

+0

Très bien expliqué! Je suis un peu en retard :(+1 ... – vpram86

+0

ClientHttpRequest semble conçu uniquement pour gérer les requêtes POST. Vous devez utiliser la méthode getInputStream de l'URL class pour les requêtes GET. –

1

Peut-être que vous devriez vérifier vos paramètres de port:

new URL(hostName + "/" + serviceName); 

Il semble qu'il manque le numéro de port ": 8080".

Certains serveurs s'attendent à recevoir des informations supplémentaires du client dans la requête, comme un agent utilisateur ou certaines données de formulaire. Même les cookies peuvent être attendus par l'application s'exécutant sur le serveur. Vous devriez également vérifier la réponse complète et pas seulement le code de réponse.

Je vous recommande d'utiliser une bibliothèque comme httpclient qui est plus pratique: http://hc.apache.org/httpcomponents-client/index.html

Voici exemple simple d'utilisation: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpclient/src/examples/org/apache/http/examples/client/ClientWithResponseHandler.java

+0

J'ai utilisé une nouvelle URL ("http: // dev1: 8080/data/xml/01423_01.xml"); et n'a toujours pas fonctionné. :( – joe

+0

Vous devez spécifier l'URL complète comme http: // dev1: 8080/data/xml/01423_01.xml – MrWhite

+0

D'une certaine manière le http -: -/-/manque dans les commentaires – MrWhite

Questions connexes