运行下面的代码时,我一直收到上述错误。所有的迹象都表明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();
}
}
}
}
答案 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文档,那么就会提到并非所有服务器都支持此模式。您确定要建立连接的服务器支持此功能吗?