我正在尝试针对远程 HTTP 服务器实现一个简单的 HTTP/1.1 客户端应用程序。如果我有301 Moved Permanently
来自服务器的响应,我将尝试从服务器响应中给出的新位置下载文件。我能够将第一GET
条消息发送到服务器并检索我询问的文件被移动到的新 URL。
问题是,当我GET
从客户端发送带有文件新位置的第二个请求时,服务器返回null
. 不确定写入客户端消息或读取服务器响应是否有任何问题。这是我的代码,任何帮助表示赞赏。
else if(serverMessage.equals("HTTP/1.1 301 Moved Permanently"))
{
System.out.println(" A new permanent URL is assigned to the file " + fileName);
serverMessage="";
lineCount=0;
while((serverMessage = reader.readLine()) != null)
{
lineCount++;
System.out.println("reply: " + serverMessage);
if(serverMessage.indexOf("Location") >= 0 )
{
for(int x=serverMessage.indexOf("Location")+10; x<serverMessage.length(); x++)
{
newURL= newURL + serverMessage.charAt(x);
}
}
}
System.out.println("newURL : " + newURL);
host = findHost(newURL);
path = findPath(newURL);
fileName=findFileName(newURL);
clientMessage = "GET ";
clientMessage = clientMessage + path;
clientMessage = clientMessage + " HTTP/1.1\r\nHost: ";
clientMessage = clientMessage + host;
clientMessage = clientMessage + "\r\n\r\n";
System.out.println("client message: \"" + clientMessage +"\"");
writer.newLine();
writer.write(clientMessage);
writer.flush();
serverMessage = reader.readLine();
System.out.println("reply2: " + serverMessage); //returns null!!!
while((serverMessage=reader.readLine())!=null)
{
System.out.println("reply2: " + serverMessage);
}
}
编辑:客户端消息的变量如下(它们都正常工作,针对现有文件进行了测试 - 成功下载!)
新网址:http
://wlab.cs.bilkent.edu.tr/~cs421/pa1/302-redirect-success.txt 主机2:wlab.cs.bilkent.edu.tr 路径2
:/~cs421/pa1/302-redirect -success.txt
文件名2:302-redirect-success.txt