【发布时间】:2014-05-22 06:50:36
【问题描述】:
基本上我设置了一个 servlet,您可以简单地发布一些数据,它可以在 localhost 上运行。但是,当它部署到我们 VPS 上的 tomcat 时,您可以在浏览器中查看该页面,但如果我的 java 代码尝试发出 POST 请求 - 我会收到错误 403(禁止)。任何想法为什么会这样,如果是这样,任何帮助将不胜感激! :)
补充细节:
服务器:Tomcat 7 上下文:ROOT(我认为)
堆栈跟踪:
java.io.IOException:服务器返回 HTTP 响应代码:403 用于 URL:http://minemanager.org/auth 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1626) 在 net.stormdev.MTA.SM.http.SimplePostClient.post(SimplePostClient.java:40) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在 java.util.concurrent.FutureTask.run(FutureTask.java:262) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:744)
在 servlet 中,代码是在 localhost 上工作的“doPost”方法中的简单响应:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
// Actual logic goes here.
PrintWriter out = response.getWriter();
out.println("<p>Oh dear, you can't access this like this!</p>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text");
PrintWriter out = response.getWriter();
Object accEmail = request.getParameter("accEmail");
Object accUUID = request.getParameter("accUUID");
if(accEmail == null || accUUID == null){
out.println("false"); //Nope, not valid...
out.flush();
out.close();
return;
}
String resp = ""+Auths.isValid(accUUID.toString(), accEmail.toString());
out.println(resp);
out.flush();
out.close();
}
最后是发送请求的代码:
package net.stormdev.MTA.SM.http;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
public class SimplePostClient {
public static String post(String site, String[] keys, String[] values){
String data = "";
if(keys.length > values.length){
throw new RuntimeException("Invalid keys and values!");
}
try {
// Construct data
for(int i=0;i<keys.length;i++){
String key = keys[i];
String value = values[i];
if(data.length() < 1){
data = URLEncoder.encode(key, "UTF-8") + "=" + URLEncoder.encode(value, "UTF-8");
continue;
}
data += "&" + URLEncoder.encode(key, "UTF-8") + "=" +
URLEncoder.encode(value, "UTF-8");
}
// Send data
URL url = new URL(site);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String response = "";
String line;
while ((line = rd.readLine()) != null) {
response += line;
}
wr.close();
rd.close();
return response;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
【问题讨论】:
-
如果您能提供更多信息会更好
-
是的。堆栈跟踪和代码
-
添加了堆栈跟踪! :)
标签: java servlets tomcat7 http-status-code-403