我試圖針對遠程HTTP服務器實現簡單的HTTP/1.1客戶端應用程序。如果我有一個來自服務器的響應301 Moved Permanently
,我會嘗試從服務器響應中給出的新位置下載文件。我能夠將第一個GET
消息發送到服務器,並檢索我詢問的文件被移動的新URL。服務器不響應HTTP/1.1客戶端中的併發請求使用Java
問題是,當我發送第二個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);
}
}
編輯:(!他們都正常工作,對現有文件進行測試 - 成功下載)客戶端消息的變量是如下
的newURL:http://wlab.cs.bilkent.edu.tr/~cs421/pa1/302-redirect-success.txt
主機2:wlab.cs.bilkent。 edu.tr
PATH2:/~cs421/pa1/302-redirect-success.txt
文件名2:302重定向-success.txt
您可以請發佈clientMessage變量包含什麼? – 2012-03-22 11:04:37