package com.cyb;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.SocketException;
import java.net.URL;
public class HandleRequestThread implements Runnable
{
private Socket socket;
private BufferedReader is;
private DataOutputStream os;
private String requestUrl;
public HandleRequestThread(Socket s)
{
socket = s;
try
{
is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
os = new DataOutputStream(socket.getOutputStream());
}
catch (IOException e)
{
e.printStackTrace();
}
}
public void run()
{
String text;
try
{
is.mark(1024);
while ((text = is.readLine()) != null)
{
if ("".equalsIgnoreCase(text))
{
break;
}
if (text.indexOf("GET") != -1)
{
requestUrl = text.split(" ")[1];
is.reset();
doGet();
break;
}
System.out.println(text);
}
os.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
is.close();
os.close();
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
/**
* 处理GET请求
* @param
* @throws IOException
*/
private void doGet() throws IOException
{
URL url = null;
String filename = "request";
String dir = "D:\\log";
String postfix = ".txt";
int i=1;
File f = new File(dir, filename + i + postfix);
while (f.exists())
{
i++;
f = new File(dir, filename + i +postfix);
}
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
try
{
url = new URL(this.requestUrl);
} catch (MalformedURLException e)
{
e.printStackTrace();
}
try
{
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
urlConn.setDoInput(true);
urlConn.setDoOutput(true);
urlConn.setRequestMethod("GET");
String text;
while ((text = is.readLine()) != null)
{
if ("".equalsIgnoreCase(text))
{
break;
}
if (text.indexOf("accept:") != -1)
{
urlConn.addRequestProperty("Accept",
text.substring(text.indexOf("accept: ") + "accept: ".length()));
}
if (text.indexOf("Content-type") != -1)
{
urlConn.addRequestProperty("Content-type",
text.substring(text.indexOf("Content-type: ") + "Content-type: ".length()));
}
if (text.indexOf("User-Agent") != -1)
{
urlConn.addRequestProperty("User-Agent",
text.substring(text.indexOf("User-Agent: ") + "User-Agent: ".length()));
}
if (text.indexOf("Proxy-Connection:") != -1)
{
urlConn.addRequestProperty("Proxy-Connection",
text.substring(text.indexOf("Proxy-Connection: ") + "Proxy-Connection: ".length()));
}
bw.write(text);
System.out.println(text);
}
urlConn.connect();
InputStream result = urlConn.getInputStream();
DataInputStream reader = new DataInputStream(result);
//获得响应消息的报头
String headMsg = getRespHeadMsg(urlConn);
os.write(headMsg.getBytes());
os.flush();
byte[] content = new byte[1024];
int read = reader.read(content, 0, 1024);
while (read != -1)
{
os.write(content);
os.flush();
read = reader.read(content, 0, 1024);
}
os.flush();
reader.close();
System.out.println("get result success");
}
catch (SocketException se)
{
System.out.println(se.getMessage());
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
bw.flush();
bw.close();
}
}
/**
* 获取http响应的头
* @param urlConn
*/
private String getRespHeadMsg(HttpURLConnection urlConn)
{
StringBuffer respHead = new StringBuffer("");
respHead.append(urlConn.getHeaderField(0) + "\n"); //加入响应状态行
respHead.append("content-type: " + urlConn.getContentType() + "\n");
respHead.append("contentencoding: " + urlConn.getContentEncoding() + "\n");
respHead.append("Last-Modified: " + urlConn.getLastModified() + "\n");
respHead.append("server: " + urlConn.getHeaderField("server") + "\n");
respHead.append("expires: " + urlConn.getExpiration() + "\n");
respHead.append("content-length: " + urlConn.getContentLength() + "\n");
respHead.append("MIME-version: " + urlConn.getHeaderField("MIME-version") + "\n\r");
return respHead.toString();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
前往页