程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 一個用來訪問http服務器的東西。功能類似於java.net中的那個

一個用來訪問http服務器的東西。功能類似於java.net中的那個

編輯:關於JAVA

package.NET(.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;

}

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved