掌中招聘网 » 掌中论坛 » 全部 » 一个用来访问http服务器的东西。能类似于java.net中的那个。但要强。
首页 上一页 下一页 尾页 
 本页主题: 一个用来访问http服务器的东西。能类似于java.net中的那个。但要强。
 


pengxin88

积分:60
发表主题:56




 发表于 2008-11-12 15:43 资料
楼主

package net.sonyhome.net;

import java.io.*;
import java.net.*;
import java.util.*;
import java.text.*;
/**
* 一个用来访问http服务器的东西。能类似于java.net中的那个。但要强,这个对Post方法的支持更好。
* 其实也不能说是我写的。不记得从哪儿找来的程序,稍事修改了一下。所以现在程序的结构都忘啦。
* 不过有一点是肯定的,那就是可以用。呵呵。
* 去年我做的Java版的精华区就是用这个类来访问的。
* Creation date: (2001-8-24 23:57:14)
* @author: SonyMusic
*/
public class HttpConnection {
    private URL url = null;
    //private boolean doInput = true;
    //private boolean doOutput = true;

    private boolean usePost = false;

    private boolean useCaches = false;

    private Vector reqHeaderNames = new Vector();
    private Vector reqHeaderValues = new Vector();
    private Vector resHeaderNames = null;
    private Vector resHeaderValues = null;
    private Socket socket = null;
    private OutputStream out = null;
    private InputStream in = null;
    private boolean useHttp11 = false;

    private boolean connected = false;

    private boolean inputStarted = false;

    Hashtable postData = new Hashtable();
    Hashtable getData = new Hashtable();

    /**
     * HttpConnection constructor comment.
     */
    public HttpConnection(URL url) {
        super();
        this.url = url;
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 1:16:52)
     * @param name java.lang.String
     * @param value java.lang.String
     */
    public void addGet(String name, String value) {
        getData.put(name, value);
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 1:16:52)
     * @param name java.lang.String
     * @param value java.lang.String
     */
    public void addPost(String name, String value) {
        postData.put(name, value);
    }
    public void close() throws IOException {
        if (!connected)
            return;
        out.close();
        if (inputStarted)
            in.close();
        socket.close();
    }
    public void connect() throws IOException {
        if (connected)
            return;
        if (!useCaches) {
            setRequestProperty("Pragma", "no-cache");
            //setRequestProperty("Cache-Control", "no-cache, must-revalidate");
            //setRequestProperty("Expires", "Mon, 26 Jul 1997 05:00:00 GMT");
        }
        String protocol = url.getProtocol();
        if (!protocol.equals("http"))
            throw new UnknownServiceException("unknown protocol");
        String host = url.getHost();
        int port = url.getPort();
        if (port == -1)
            port = 80;
        String file = url.getFile();

        socket = new Socket(host, port);
        out = socket.getOutputStream();
        PrintStream pout = new PrintStream(out);

        String method;
        if (usePost) {
            method = "POST";
            setRequestProperty("Content-type", "application/x-www-form-urlencoded");
            int len = getPostDataLength();
            setRequestProperty("Content-length", String.valueOf(getPostDataLength()));

        }
        else
            method = "GET";
        if (getGetDataLength() > 0) {
            file += "?" + getGetDataString();
        }
        pout.println(method + " " + file + " HTTP/1.0");

        for (int i = 0; i < reqHeaderNames.size(); ++i) {
            String name = (String) reqHeaderNames.elementAt(i);
            String value = (String) reqHeaderValues.elementAt(i);
            pout.println(name + ": " + value);
        }
        pout.println("");
        if (usePost) {
            String ttt = getPostDataString();
            pout.println(getPostDataString());
        }

        pout.flush();

        connected = true;
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 2:06:07)
     * @return boolean
     * @exception java.lang.IllegalStateException The exception description.
     */
    public boolean contentIsText() throws IOException {
        String type = getContentType();
        if (type.startsWith("text"))
            return true;
        return false;
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 2:20:31)
     * @return byte[]
     */
    public byte[] getByteArray() throws IOException {
        DataInputStream din = new DataInputStream(getInputStream());

        byte[] ret;
        byte[] b = new byte[1024];
        int off = 0, len = 0;

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while ((len = din.read(b, off, 1024)) > 0) {
            bos.write(b, 0, len);
            if (len < 1024)
                break;
        }
        bos.flush();
        bos.close();
        return bos.toByteArray();
    }
    // Gets the content length.  Returns -1 if not known.
    public int getContentLength() throws IOException {
        return getHeaderFieldInt("content-length", -1);
    }
    /// Gets the content type.  Returns null if not known.
    public String getContentType() throws IOException {
        return getHeaderField("content-type");
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 1:18:23)
     * @return java.lang.String
     */
    public int getGetDataLength() {
        return getGetDataString().length();
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 1:18:23)
     * @return java.lang.String
     */
    public String getGetDataString() {
        StringBuffer buf = new StringBuffer();
        Enumeration enu = getData.keys();
        while (enu.hasMoreElements()) {
            String key = (String) (enu.nextElement());
            String value = (String) (getData.get(key));
            if (buf.length() > 0)
                buf.append("&");
            buf.append(key);
            buf.append("=");
            buf.append(URLEncoder.encode(value));
        }
        return buf.toString();
    }
    public String getHeaderField(String name) throws IOException {
        if (resHeaderNames == null)
            startInput();
        int i = resHeaderNames.indexOf(name.toLowerCase());
        if (i == -1)
            return null;
        return (String) resHeaderValues.elementAt(i);
    }
    public long getHeaderFieldDate(String name, long def) throws IOException {
        try {
            return DateFormat.getDateInstance().parse(getHeaderField(name)).getTime();
        }
        catch (ParseException e) {
            throw new IOException(e.toString());
        }
    }
    public int getHeaderFieldInt(String name, int def) throws IOException {
        try {
            return Integer.parseInt(getHeaderField(name));
        }
        catch (NumberFormatException t) {
            return def;
        }
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 1:12:09)
     * @return java.util.Enumeration
     */
    public Enumeration getHeaderNames() {
        return resHeaderNames.elements();
    }
    public InputStream getInputStream() throws IOException {
        startInput();
        return in;
    }
    public OutputStream getOutputStream() throws IOException {
        connect();
        return out;
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 1:18:23)
     * @return java.lang.String
     */
    public int getPostDataLength() {
        return getPostDataString().length();
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 1:18:23)
     * @return java.lang.String
     */
    public String getPostDataString() {
        StringBuffer buf = new StringBuffer();
        Enumeration enu = postData.keys();
        while (enu.hasMoreElements()) {
            String key = (String) (enu.nextElement());
            String value = (String) (postData.get(key));
            if (buf.length() > 0)
                buf.append("&");
            buf.append(key);
            buf.append("=");
            buf.append(URLEncoder.encode(value));
        }
        return buf.toString();
    }
    public String getRequestProperty(String name) {
        if (connected)
            throw new IllegalAccessError("already connected");
        int i = reqHeaderNames.indexOf(name);
        if (i == -1)
            return null;
        return (String) reqHeaderValues.elementAt(i);
    }
    public URL getURL() {
        return url;
    }
    public boolean getUseCaches() {
        return useCaches;
    }
    public boolean getUseHttp11() {
        return useHttp11;
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 1:48:15)
     * @return boolean
     */
    public boolean isUsePost() {
        return usePost;
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 0:15:53)
     * @param args java.lang.String[]
     */
    public static void main(String[] args) {
        try {
            /*
            URL url=new URL("http","192.168.0.3","/Post.php");
            HttpConnection con=new HttpConnection(url);
            con.setUsePost(true);
            con.setUseCaches(false);
            //con.setRequestProperty("Connection", "Keep-Alive");
            
            con.addGet("TextField","你好");
            con.addGet("Submit", "submit");
            
            con.connect();
            //ByteArrayOutputStream bos=con.getByteArray();
            byte[] ret=con.getByteArray();
            System.out.println(new String(ret));
            
            System.out.println("");
            Enumeration enu=con.getHeaderNames();
            while (enu.hasMoreElements()) {
                String headerName=(String)(enu.nextElement());
                System.out.println(headerName+": "+con.getHeaderField(headerName));
            }
            con.close();
            */

            URL url = new URL("http", "192.168.0.3", "/codemaker/IMAGES/BO.GIF");
            HttpConnection con = new HttpConnection(url);
            con.connect();

            FileOutputStream fos = new FileOutputStream("d:\bo.gif");
            fos.write(con.getByteArray());
            fos.flush();
            fos.close();

            System.out.println("");
            Enumeration enu = con.getHeaderNames();
            while (enu.hasMoreElements()) {
                String headerName = (String) (enu.nextElement());
                System.out.println(headerName + ": " + con.getHeaderField(headerName));
            }
            con.close();

        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 1:16:52)
     * @param name java.lang.String
     * @param value java.lang.String
     */
    public void removeGet(String name) {
        getData.remove(name);
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 1:16:52)
     * @param name java.lang.String
     * @param value java.lang.String
     */
    public void removePost(String name) {
        postData.remove(name);
    }
    public void setRequestProperty(String name, String value) {
        if (connected)
            throw new IllegalAccessError("already connected");
        reqHeaderNames.addElement(name);
        reqHeaderValues.addElement(value);
    }
    public void setUseCaches(boolean useCaches) {
        if (connected)
            throw new IllegalAccessError("already connected");
        this.useCaches = useCaches;
    }
    public void setUseHttp11(boolean useHttp11) {
        if (connected)
            throw new IllegalAccessError("already connected");
        this.useHttp11 = useHttp11;
    }
    /**
     * Insert the method's description here.
     * Creation date: (2001-8-25 1:48:15)
     * @param newUsePost boolean
     */
    public void setUsePost(boolean newUsePost) {
        if (connected)
            throw new IllegalAccessError("already connected");
        usePost = newUsePost;
    }
    private void startInput() throws IOException {
        connect();
        if (inputStarted)
            return;
        in = socket.getInputStream();
        resHeaderNames = new Vector();
        resHeaderValues = new Vector();
        DataInputStream din = new DataInputStream(in);
        String line;

        // Read and ignore the status line.
        line = din.readLine();
        // Read and save the header lines.
        while (true) {
            line = din.readLine();
            if (line == null || line.length() == 0)
                break;
            int colonBlank = line.indexOf(": ");
            if (colonBlank != -1) {
                String name = line.substring(0, colonBlank);
                String value = line.substring(colonBlank + 2);
                resHeaderNames.addElement(name.toLowerCase());
                resHeaderValues.addElement(value);
            }
        }

        inputStarted = true;
    }
    /**
     * Returns a String that represents the value of this object.
     * @return a string representation of the receiver
     */
    public String toString() {
        // Insert code to print the receiver here.
        // This implementation forwards the message to super. You may replace or supplement this.
        return this.getClass().getName() + ":" + url;
    }
}

首页 上一页 下一页 尾页 
 各地招聘导航
·北京 ·天津 ·上海
·西安 ·东莞 ·广州
·深圳 ·南京 ·杭州
·济南 ·南昌 ·兰州
·合肥 ·长沙 ·武汉
·成都 ·重庆 ·太原
·福州 ·沈阳 ·南宁
·海口 ·贵阳 ·郑州
·银川 ·西宁 ·昆明
·拉萨 ·长春
·石家庄  ·乌鲁木齐
·哈尔滨  ·呼和浩特
 各地兼职导航
·北京 ·天津 ·上海
·西安 ·东莞 ·广州
·深圳 ·南京 ·杭州
·济南 ·南昌 ·兰州
·合肥 ·长沙 ·武汉
·成都 ·重庆 ·太原
·福州 ·沈阳 ·南宁
·海口 ·贵阳 ·郑州
·银川 ·西宁 ·昆明
·拉萨 ·长春
·石家庄  ·乌鲁木齐
·哈尔滨  ·呼和浩特