当前位置:编程学习 > wap >>

一个使用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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,