使用java控制HTTP协议客户端应用_第1页
使用java控制HTTP协议客户端应用_第2页
使用java控制HTTP协议客户端应用_第3页
使用java控制HTTP协议客户端应用_第4页
使用java控制HTTP协议客户端应用_第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;pr

2、ivate 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(),tar

3、get.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.printSt

4、ackTrace();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(

5、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);openSer

6、ver(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&qu

7、ot; 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

8、=null | !target.getProtocol().toUpperCase().equals("HTTP") ) throw new ProtocolException(" 这不是 HTTP 协议 ");this.target = target; catch(MalformedURLException m) throw new ProtocolException(" 协议格式错误 ");/* 与 Web 服务器连接。若找不到 Web 服务器, InetAddress 会引发 UnknownHostException* 异常。若

9、 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 = I

10、netAddress.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 closeS

11、erver() 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+=&quo

12、t;:"+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 byte1024;int coun

13、t=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.in

14、dexOf(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) c

15、ase 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' && w

16、ord!='n' && word>-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(

17、 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);datacount+ = (byte)symbol;word=-1;message = new String

18、(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;/ 获得正文数据whil

19、e( (word=receiver.read()!=-1) if(count = data.length) data = addCapacity(data);datacount+ = (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.

温馨提示

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

评论

0/150

提交评论