使用java控制HTTP协议客户端应用.doc

上传人:scccc 文档编号:12945582 上传时间:2021-12-08 格式:DOC 页数:5 大小:61.50KB
返回 下载 相关 举报
使用java控制HTTP协议客户端应用.doc_第1页
第1页 / 共5页
使用java控制HTTP协议客户端应用.doc_第2页
第2页 / 共5页
使用java控制HTTP协议客户端应用.doc_第3页
第3页 / 共5页
使用java控制HTTP协议客户端应用.doc_第4页
第4页 / 共5页
使用java控制HTTP协议客户端应用.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《使用java控制HTTP协议客户端应用.doc》由会员分享,可在线阅读,更多相关《使用java控制HTTP协议客户端应用.doc(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 responseCo

20、de;public String getServerVersion() return serverVersion;public InputStream getInputStream() return byteStream;public synchronized String getHeaderKey(int i) if(i>=header.size() return null;Enumeration enum = header.propertyNames(); String key = null;for(int j=0; j<=i; j+) key = (String)enum.n

21、extElement();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.0rn"+ "Accept: www/source; text/html; image/gif; */*rn" return inf; private byte addCapacity(byte rece) byte temp = new byterece.length+1024;System.arraycopy(rece,0,temp,0,rece.length); return temp;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1