服务器返回HTTP响应代码:403为URL :(如何解决此问题?)

时间:2012-03-04 09:36:47

标签: java http-status-code-403

运行下面的代码时,我一直收到上述错误。所有的迹象都表明COOKIES的问题来自于我所读到的。如果我是正确的,我将如何实现CookieManager来解决此问题?或者,如果COOKIES不是问题,我将如何解决问题?

public class Client {

    public Client(){
    }

    String executePost(String targetURL, String urlParameters){
        URL url;
        HttpURLConnection connection = null;

        try{
            //Create connection
            url = new URL(targetURL);
            connection = (HttpURLConnection)url.openConnection();
            connection.setChunkedStreamingMode(0);
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", 
                    "application/x-www-form-urlencoded");
            connection.setRequestProperty("Content-Length", "" + 
                    Integer.toString(urlParameters.getBytes().length));
            connection.setRequestProperty("Content-Language", "en-US"); 

            connection.setUseCaches(false);
            connection.setDoInput(true);
            connection.setDoOutput(true);

            //send Request 
            DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
            dataout.writeBytes(urlParameters);
            dataout.flush();
            dataout.close();

            //get response
            InputStream is = connection.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String line;
            StringBuffer response = new StringBuffer();

            while((line = br.readLine()) != null){
                response.append(line);
                response.append('\n');

            }
            System.out.println(response.toString());
            br.close();
            return response.toString();
        }catch(Exception e){
            System.out.println("Unable to full create connection");
            e.printStackTrace();
            return null;
        }finally {

            if(connection != null) {
                connection.disconnect(); 
            }
        }
    }
}

3 个答案:

答案 0 :(得分:3)

我删除了: connection.setChunkedStreamingMode(0);并且代码按原样运行

String executePost(String targetURL, String urlParameters){

    URL url;
    HttpURLConnection connection = null;        
    try{
        //Create connection

        url = new URL(targetURL);
        connection = (HttpURLConnection)url.openConnection();

        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", 
                   "application/x-www-form-urlencoded");
        connection.setRequestProperty("Content-Language", "en-US"); 
        connection.setRequestProperty("User-Agent",
                "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11");

        connection.setUseCaches(false);
        connection.setDoInput(true);
        connection.setDoOutput(true);

        //send Request 
        DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
        dataout.writeBytes(urlParameters);
        dataout.flush();
        dataout.close();

        //get response
        InputStream is = connection.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line;
        StringBuffer response = new StringBuffer();

        while((line = br.readLine()) != null){
            response.append(line);
            response.append('\n');

        }
        System.out.println(response.toString());
        br.close();
        return response.toString();
    }catch(Exception e){
        System.out.println("Unable to full create connection");
        e.printStackTrace();
        return null;
    }finally {

          if(connection != null) {
            connection.disconnect(); 
          }
    }


}

答案 1 :(得分:2)

403响应意味着“禁止”。

  

所有迹象都表明COOKIES存在问题。如果我是正确的,我将如何实现CookieManager来解决此问题?或者,如果COOKIES不是问题,我将如何解决问题?

不是那么简单。

  • 您可能需要提供有效的凭据(以Cookie,基本身份验证标头或其他形式)。但是,您希望服务器在这种情况下使用401进行响应,或者使用302将浏览器重定向到登录页面。

  • 也可能是您提供了凭据,但它们不足以满足您尝试执行的请求。

您最好的办法是在尝试登录并使用网络浏览器中的服务时,确切了解发生了什么。然后尝试复制它。或者,阅读站点文档或询问站点管理员该怎么做。

如果您尝试访问的是您的站点/服务器,则需要弄清楚如何实施安全性。也许您错误配置了服务器,或者忽略了设置/启用登录。


设置Cookie管理器不太可能(IMO)解决此问题。

答案 2 :(得分:1)

如果您看到setChunkedStreamingMode的API文档,那么就会提到并非所有服务器都支持此模式。您确定要建立连接的服务器支持此功能吗?