一个使用Socket实现http获取网页的例子
看了好久的http-core的教程,自己写了些代码,各位请轻喷package com.oppo.client;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParamBean;
import org.apache.http.params.HttpParams;
public class Client
{
public static final int SO_TIMEOUT = 2000;
public static final int CONN_TIMEOUT = 2000;
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException
{
final HttpParams params = newHttpParams();
LocalHttpRequest httpRequest = new BaiduHttpRequest();
LocalSocketFactory socketFactory = BasicSocketFactory.getInstance();
final Socket socket = socketFactory.connectSocket(null, httpRequest.getHost(), 80, null, -1, params);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write(getRequestHeaders(getRequestLine("GET", httpRequest.getPath(), "HTTP/1.1")));
writer.flush();
Scanner scan = new Scanner(socket.getInputStream(), "gbk");
while (scan.hasNextLine())
{
System.out.println(scan.nextLine());
}
}
public static String getRequestLine(String method, String uri, String version)
{
StringBuilder builder = new StringBuilder();
if (method == null)
{
throw new IllegalArgumentException();
}
builder.append(method);
if (uri == null)
{
throw new IllegalArgumentException();
}
builder.append(" ").append(uri);
if (version == null)
{
throw new IllegalArgumentException();
}
builder.append(" ").append(version);
return builder.toString();
}
public static String getRequestHeaders(String requestLine)
{
final String suffix = "\r\n";
StringBuilder builder = new StringBuilder();
builder.append(requestLine).append(suffix);
builder.append("Accept: */*").append(suffix);
builder.append("Accept-Language: zh-CN").append(suffix);
builder.append("User-Agent: Mozilla/4.0 (compatible; MSIE6.0; WINDOWS NT 5.0)").append(suffix);
builder.append("Connection: Keep-Alive").append(suffix);
builder.append(suffix);
return builder.toString();
}
public static HttpParams newHttpParams()
{
HttpParams params = new BasicHttpParams();
final HttpConnectionParamBean paramsBean = new HttpConnectionParamBean(params);
paramsBean.setSoTimeout(SO_TIMEOUT);
paramsBean.setConnectionTimeout(CONN_TIMEOUT);
return params;
}
public inte易做图ce LocalHttpRequest
{
public String getHost();
public String getPath();
}
public static class BaiduHttpRequest implements LocalHttpRequest
{
public static final String BAIDU_HOST = "www.baidu.com";
public static final String BAIDU_PATH = "/index.html";
public BaiduHttpRequest()
{
super();
}
@Override
public String getHost()
{
return BAIDU_HOST;
}
@Override
public String getPath()
{
return BAIDU_PATH;
}
}
public static class GoogleIconRequest implements LocalHttpRequest
{
public static final String GOOGLE_HOST = "www.google.com.hk";
public static final String GOOGLE_ICON_URI = "/images/srpr/logo3w.png";
@Override
public String getHost()
{
return GOOGLE_HOST;
}
@Override
public String getPath()
{
return GOOGLE_ICON_URI;
}
}
public static inte易做图ce LocalHttpResponse
{
public String getStatusLine();
}
}
补充:移动开发 , Android