⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dohttp.java

📁 彩信开发一般应用好了不?彩信开发一般应用好了不?彩信开发一般应用好了不?彩信开发一般应用好了不?彩信开发一般应用好了不?
💻 JAVA
字号:
package mmsproject.common;

import java.net.*;
import java.io.*;
import java.util.Properties;
import java.util.Enumeration;
import sun.misc.*;

/**
 * <p>Title: 彩信发送接收项目</p>
 * <p>Description: 此类不用</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author tomato
 * @version 1.0
 */

public class DoHttp {

  protected Socket client;
  protected BufferedOutputStream sender;
  protected BufferedInputStream receiver;
  protected ByteArrayInputStream byteStream;
  protected URL target;
  private int responseCode = -1;
  private String responseMessage = "";
  private String serverVersion = "";
  private Properties header = new Properties();


  public DoHttp() {}

  public DoHttp(String url) {
    GET(url);
  }

  /*
   * HEAD方法只请求URL的元信息,不包括URL本身。若怀疑本机和服务器上的
   * 文件相同,用这个方法检查最快捷有效。
   */
  public void DoHEAD(String url) {
    try {
      checkHTTP(url);
      openServer(target.getHost(), target.getPort());
      String cmd = "HEAD " + getURLFormat(target) + " HTTP/1.1\r\n";
      //    + getBaseHeads() + "\r\n";
      sendMessage(cmd);
      receiveMessage();
    } catch (ProtocolException p) {
      p.printStackTrace();
      return;
    } catch (UnknownHostException e) {
      e.printStackTrace();
      return;
    } catch (IOException i) {
      i.printStackTrace();
    }
    return;
  }

  /* GET方法根据URL,会请求文件、数据库查询结果、程序运行结果等多种内容 */
  public void GET(String url) {
    try {
      checkHTTP(url);
      openServer(target.getHost(), target.getPort());
      String cmd = "GET " + getURLFormat(target) + " HTTP/1.1\r\n";
      //    + getBaseHeads() + "\r\n";
      sendMessage(cmd);
      receiveMessage();
    } catch (ProtocolException p) {
      p.printStackTrace();
      return;
    } catch (UnknownHostException e) {
      e.printStackTrace();
      return;
    } catch (IOException i) {

      i.printStackTrace();
    }
    return;
  }

  /*
   * POST方法是向服务器传送数据,以便服务器做出相应的处理。例如网页上常用的
   * 提交表格。
   */
  public void DoPost(String url, String content) {
    try {
      //
      BASE64Encoder bse = new BASE64Encoder();

      String strNVP = bse.encode("jlt=jlt".getBytes());

      checkHTTP(url);
      openServer(target.getHost(), target.getPort());

      String cmd = "POST " + getURLFormat(target)
          + " HTTP/1.1\r\n";
      //   + getBaseHeads();

      cmd += "Content-type: text/plain\r\n";
      //cmd += "Authorization:" + strNVP;
      cmd += "Content-length: " + content.length() + "\r\n\r\n";
      cmd += content + "\r\n";

      sendMessage(cmd);

      //取得服务器返回的信息
      receiveMessage();

    } catch (ProtocolException p) {
      p.printStackTrace();
      return;
    } catch (UnknownHostException e) {
      e.printStackTrace();
      return;
    } catch (IOException i) {
      i.printStackTrace();
    }
    return;
  }

  protected void checkHTTP(String url) throws ProtocolException {
    try {
      URL target = new URL(url);
      if (target == null || !target.getProtocol().toUpperCase().equals("HTTP"))
        throw new ProtocolException("这不是HTTP协议");
      this.target = target;
    } catch (MalformedURLException m) {
      throw new ProtocolException("协议格式错误");
    }
  }

  /*
   * 与Web服务器连接。若找不到Web服务器,InetAddress会引发UnknownHostException
   * 异常。若Socket连接失败,会引发IOException异常。
   */
  protected void openServer(String host, int port) throws
      UnknownHostException, IOException {
    header.clear();
    responseMessage = "";
    responseCode = -1;
    try {
      if (client != null)
        closeServer();
      if (byteStream != null) {
        byteStream.close();
        byteStream = null;
      }
      InetAddress address = InetAddress.getByName(host);
      client = new Socket(address, port == -1 ? 80 : port);
      sender = new BufferedOutputStream(client.getOutputStream());
      receiver = new BufferedInputStream(client.getInputStream());
    } catch (UnknownHostException u) {
      throw u;
    } catch (IOException i) {
      throw i;
    }
  }

  /* 关闭与Web服务器的连接 */
  protected void closeServer() throws IOException {
    if (client == null)
      return;
    try {
      client.close();
      sender.close();
      receiver.close();
    } catch (IOException i) {
      throw i;
    }
    client = null;
    sender = null;
    receiver = null;
  }

  protected String getURLFormat(URL target) {
    String spec = "http://" + target.getHost();
    if (target.getPort() != -1)
      spec += ":" + target.getPort();
    return spec += target.getFile();
  }

  /* 向Web服务器传送数据 */
  protected void sendMessage(String data) throws IOException {
    sender.write(data.getBytes(), 0, data.length());
    sender.flush();
  }

  /* 接收来自Web服务器的数据 */
  protected void receiveMessage() throws IOException {
    byte data[] = new byte[1024];
    int count = 0;
    int word = -1;
// 解析第一行
    while ( (word = receiver.read()) != -1) {
      if (word == '\r' || word == '\n') {
        word = receiver.read();
        if (word == '\n')
          word = receiver.read();
        break;
      }
      if (count == data.length)
        data = addCapacity(data);
      data[count++] = (byte) word;
    }
    String message = new String(data, 0, count);
    int mark = message.indexOf(32);
    serverVersion = message.substring(0, mark);
    while (mark < message.length() && message.charAt(mark + 1) == 32)
      mark++;
    responseCode = Integer.parseInt(message.substring(mark + 1, mark += 4));
    responseMessage = message.substring(mark, message.length()).trim();

// 应答状态码和处理请读者添加
    switch (responseCode) {
      case 400:
        throw new IOException("错误请求");
      case 404:
        throw new FileNotFoundException(getURLFormat(target));
      case 503:
        throw new IOException("服务器不可用");
    }
    if (word == -1)
      throw new ProtocolException("信息接收异常终止");
    int symbol = -1;
    count = 0;
// 解析元信息
    while (word != '\r' && word != '\n' && word > -1) {
      if (word == '\t')
        word = 32;
      if (count == data.length)
        data = addCapacity(data);
      data[count++] = (byte) word;
      parseLine: {
        while ( (symbol = receiver.read()) > -1) {
          switch (symbol) {
            case '\t':
              symbol = 32;
              break;
            case '\r':
            case '\n':
              word = receiver.read();
              if (symbol == '\r' && word == '\n') {
                word = receiver.read();
                if (word == '\r')
                  word = receiver.read();
              }
              if (word == '\r' || word == '\n' || word > 32)
                break parseLine;
              symbol = 32;
              break;
          }
          if (count == data.length)
            data = addCapacity(data);
          data[count++] = (byte) symbol;
        }
        word = -1;
      }
      message = new String(data, 0, count);
      mark = message.indexOf(':');
      String key = null;
      if (mark > 0)
        key = message.substring(0, mark);
      mark++;
      while (mark < message.length() && message.charAt(mark) <= 32)
        mark++;
      String value = message.substring(mark, message.length());
      header.put(key, value);
      count = 0;
    }
// 获得正文数据
    while ( (word = receiver.read()) != -1) {
      if (count == data.length)
        data = addCapacity(data);
      data[count++] = (byte) word;
    }
    if (count > 0)
      byteStream = new ByteArrayInputStream(data, 0, count);
    data = null;
    closeServer();
  }

  public String getResponseMessage() {
    return responseMessage;
  }

  public int getResponseCode() {
    return responseCode;
  }

  public String getServerVersion() {
    return serverVersion;
  }

  public InputStream getInputStream() {
    return byteStream;
  }

  public synchronized String getHeaderKey(int i) {
    if (i >= header.size())
      return null;
    Enumeration enumTemp = header.propertyNames();
    String key = null;
    for (int j = 0; j <= i; j++)
      key = (String) enumTemp.nextElement();
    return key;
  }

  public synchronized String getHeaderValue(int i) {
    if (i >= header.size())
      return null;
    return header.getProperty(getHeaderKey(i));
  }

  public synchronized String getHeaderValue(String key) {
    return header.getProperty(key);
  }


  //protected String getBaseHeads() {
  //  String inf = "User-Agent: myselfHttp/1.0\r\n" +
  //      "Accept: www/source; text/html; image/gif; */*\r\n";
  //  return inf;
  //}


  private byte[] addCapacity(byte rece[]) {
    byte temp[] = new byte[rece.length + 1024];
    System.arraycopy(rece, 0, temp, 0, rece.length);
    return temp;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -