Java http调用返回响应代码:501

时间:2009-09-10 17:46:33

标签: java http

我遇到此错误的问题:

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

请参阅此代码:

   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;
     }

2 个答案:

答案 0 :(得分:3)

501响应意味着“未实现”,通常用于表示服务器不理解您使用的HTTP方法(例如,获取,发布等)。

我无法识别ClientHttpRequest,但您有一行说

connection.setRequestMethod("GET");

然后是一行

input = postRequest.post();

我不确定post()实际上做了什么,但这是否意味着发送POST请求?如果是这样,则与第一行中指定的GET相矛盾。

无论哪种方式,服务器都说它不在GET或POST方法下,无论你的代码实际发送的是哪一个。您需要找出服务器为该URL支持的方法,并使用它。

答案 1 :(得分:1)

也许你应该检查你的端口设置:

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

看起来缺少端口号“:8080”。

某些服务器希望请求中的客户端提供其他信息,例如用户代理或某些表单数据。服务器上运行的应用程序甚至可以预期cookie。您还应该检查完整的响应,而不仅仅是响应代码。

我建议你使用像httpclient这样更方便的库: http://hc.apache.org/httpcomponents-client/index.html

这是一个简单的用法示例: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpclient/src/examples/org/apache/http/examples/client/ClientWithResponseHandler.java