【发布时间】:2015-04-13 18:12:36
【问题描述】:
希望这是一个简单的问题。我正在尝试向大学服务器发出 HEAD/GET 请求,以确保服务器甚至存在。 HEAD 请求首先发送,如果失败,我们发送 GET 请求。不幸的是,这两个请求都返回 403。这是使用我制作的一个小 Java 程序。
现在,当我使用 Linux 发送 HEAD/GET 请求时,我都会收到 200 响应。那么这里的交易是什么?与 Linux 相比,Java 请求的信息有区别吗?提前谢谢你!
编辑:这是代码。我用来运行它的命令只是“java FILE URL”。我比较它的 Linux 命令是“curl -I URL”。
public static boolean urlHeadRequest(String link)
{
PageConnection conn;
boolean problem = false;
int status;
URL url;
try{
if(link.indexOf("#") != -1){
link = link.substring(0, link.lastIndexOf("#"));
}
url = new URL(link);
conn = new PageConnection(url);
System.out.println("Requesting: " + link);
//Set the request method to HEAD - only get back header information
conn.setRequestMethod("HEAD");
status = conn.getHttpResponseCode();
System.out.println("\tHEAD request status: " + status);
//Try GET request if HEAD fails, this takes longer but is more likely to succeed
if ((status >= 200) && (status < 299)){
System.out.println("Server is good.");
}
else { //Server is down
conn = new PageConnection(url);
conn.setRequestMethod("GET");
status = conn.getHttpResponseCode();
System.out.println("HEAD request failed. Using GET request...");
if ((status < 200) || (status >= 299)){
problem = true;
System.out.println(link + " is unreachable with status " + status);
}
else{
problem = false;
System.out.println("URL is reachable using GET request with status " + status);
}
}
}
catch(Exception e){
System.out.println("Error: Server is not responding or does not exist.");
}
return problem;
}
PageConnection 是一个自定义类。我认为这两个功能可能是相关的:
public void setRequestMethod(String method) throws ProtocolException
{
huc.setRequestMethod(method);
}
/**
* @return HTTP status code, an integer between 0 and 999. For details see <a href="http://www.w3.org/Protocols/HTTP/HTRESP.html">W3C HTTP Response Codes</a>
* @throws IOException
*/
public int getHttpResponseCode() throws IOException
{
this.huc.getErrorStream();
return this.huc.getResponseCode();
}
希望这会有所帮助。
【问题讨论】:
-
我按照下面的建议设置了用户代理,但它似乎没有用。
huc.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");我会尝试区分标题,但这需要一些时间。谢谢大家的建议。