希望这是一个简单的问题。我正在尝试向大学服务器发出HEAD / GET请求,确保服务器存在。 HEAD请求首先发送,如果失败,我们发送GET请求。不幸的是,这两个请求都返回了403&。这是使用我制作的一个小程序。
现在,当我使用Linux发送HEAD / GET请求时,我得到了200响应。那么这里的交易是什么?与Linux相比,请求的信息与Linux相比有何不同?提前谢谢你!
编辑:这是代码。我用来运行它的命令只是" 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();
}
希望这有点帮助。
答案 0 :(得分:0)
不是一个直截了当的问题需要回答。但是根据给定的输入,我会尝试提出建议。
如果可能,请分享正在使用的网址,java代码和linux脚本/命令,以便社区可以提供帮助。
答案 1 :(得分:0)
您是否设置了用户代理?有时,安全策略会阻止意外的代理商减少自动抓取工具(因为所有合法的浏览器流量都会在那里提供变量)。
我跟随之前的用户评论并区分标题,并尝试使它们匹配。 403通常表示服务器拒绝提交您的请求,因为它不喜欢标题中的内容。