リモートHTTPサーバーに対して単純なHTTP/1.1クライアントアプリケーションを実装しようとしています。サーバーからの応答が301 Moved Permanently
の場合、サーバーの応答で指定された新しい場所からファイルをダウンロードしようとします。最初にGET
メッセージをサーバーに送信し、移動先のファイルが見つかった新しいURLを取得できました。Javaを使用するHTTP/1.1クライアントでサーバーが同時要求に応答しない
問題は、ファイルの新しい場所でクライアントからの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);
}
}
EDIT:クライアント・メッセージの変数は、以下の(彼らはすべての既存のファイルのためにテストされ、正常に動作 - 正常にダウンロード!)です
NEWURL: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
FILENAME2:302-リダイレクトsuccess.txt
clientMessage変数に何が含まれているかをお知らせください。 –