使用java控制HTTP协议客户端应用.doc_第1页
使用java控制HTTP协议客户端应用.doc_第2页
使用java控制HTTP协议客户端应用.doc_第3页
使用java控制HTTP协议客户端应用.doc_第4页
使用java控制HTTP协议客户端应用.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

import .*;import java.io.*;import java.util.Properties;import java.util.Enumeration;public class Http 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 Http() public Http(String url) GET(url) ;/* GET方法根据URL,会请求文件、数据库查询结果、程序运行结果等多种内容 */public void GET(String url) try checkHTTP(url);openServer(target.getHost(),target.getPort() );String cmd = GET + getURLFormat(target) + HTTP/1.0rn+ getBaseHeads()+rn;sendMessage(cmd);receiveMessage();catch(ProtocolException p) p.printStackTrace();return;catch(UnknownHostException e) e.printStackTrace();return;catch(IOException i)i.printStackTrace();return;/* HEAD方法只请求URL的元信息,不包括URL本身。若怀疑本机和服务器上的* 文件相同,用这个方法检查最快捷有效。*/public void HEAD(String url) try checkHTTP(url);openServer(target.getHost(),target.getPort() );String cmd = HEAD +getURLFormat(target)+ HTTP/1.0rn+getBaseHeads()+rn;sendMessage(cmd);receiveMessage();catch(ProtocolException p) p.printStackTrace();return;catch(UnknownHostException e) e.printStackTrace();return;catch(IOException i)i.printStackTrace();return;/* POST方法是向服务器传送数据,以便服务器做出相应的处理。例如网页上常用的* 提交表格。*/public void POST(String url,String content) try checkHTTP(url);openServer(target.getHost(),target.getPort() );String cmd = POST + getURLFormat(target) +HTTP/1.0rn+getBaseHeads();cmd += Content-type: application/x-www-form-urlencodedrn;cmd += Content-length: + content.length() + rnrn;cmd += content+rn;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) throwsUnknownHostException,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 IOExceptionsender.write(data.getBytes(),0,data.length();sender.flush();/* 接收来自Web服务器的数据 */protected void receiveMessage() throws IOExceptionbyte data = new byte1024;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);datacount+=(byte)word;String message = new String(data,0,count);int mark = message.indexOf(32);serverVersion = message.substring(0,mark);while( mark-1) if(word=t) word=32;if(count=data.length) data = addCapacity(data);datacount+ = (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 | word32) break parseLine;symbol=32; break;if(count=data.length) data = addCapacity(data);datacount+ = (byte)symbol;word=-1;message = new String(data,0,count);mark = message.indexOf(:);String key = null;if(mark0) key = message.substring(0,mark);mark+;while( markmessage.length() & message.charAt(mark)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 enum = pertyNames();String key = null;for(int j=0; j=header.size() return null;return header.getProperty(getHeaderKey(i);public synchronized String getHeaderValue(String key) return header.getProperty(key);prote

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论