java笔记– 用socket做的一个简单的http client

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.Scanner;


public class TestSocket_Client {
	public static void main(String[] args) throws Exception {
		String server = "www.sina.com.cn";
		int serverPort = 80;
		int nRetryCnt=3;
		Socket s = new Socket(server, serverPort);
		StringBuilder bld=new StringBuilder();
		bld.append("GET / HTTP/1.1");
		bld.append("\r\n");
		bld.append("Accept: text/html, */*\r\n");
		bld.append("\r\n");
		bld.append("Accept-Language: zh-CN");
		bld.append("\r\n");
		bld.append("User-Agent: Mozilla/5.0");
		bld.append("\r\n");
		bld.append("Accept-Encoding: deflate");
		bld.append("\r\n");
		bld.append("Host: www.sina.com.cn");
		bld.append("\r\n");
		bld.append("Connection: Keep-Alive");
		bld.append("\r\n");
		bld.append("\r\n");
		bld.append("\r\n");
		String data = bld.toString();
		while(nRetryCnt-->0) { 
			
			printf("%d/3: Connecting to server '%s':'%d'\n", 3 - nRetryCnt, server, serverPort);
			InputStream in = s.getInputStream();
			OutputStream out = s.getOutputStream();
			out.write(data.getBytes());
			
			byte[] buffer = new byte[1024*1024*10];
			File fTemp = File.createTempFile("temp", ".txt");
			printf("Temp file %s created\n", fTemp.getAbsolutePath());
			int nReads = in.read(buffer);
			while(nReads>0) {
				FileOutputStream fs = new FileOutputStream(fTemp,true);
				fs.write(buffer, 0, nReads);
				fs.flush();
				fs.close();
				nReads = in.read(buffer);
			} 
			printf("%d bytes read from server\n", fTemp.length());
			/*
			if (fTemp.length()>0) {			
				//Files.readAllLines(fTemp, Charset.defaultCharset());
				Scanner sc=new Scanner(fTemp);
				while(sc.hasNextLine()) {
					println(sc.nextLine());
				}
				sc.close();
					
			}*/
		}
		s.close();
	}//main()
	private static void printf(String format, Object... args) {
		if (args == null || args.length == 0) {
			System.out.print(format);
		} else {
			System.out.printf(format, args);
		}
	}
	private static void println(String msg) {
		System.out.println(msg);
	}
}

posted on 2012-03-11 13:23  learner  阅读(383)  评论(0)    收藏  举报

导航