热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

httpclient4的官网例子的详细解释

下面我给出httpclient4的官网例子的详细解释:作者@author:huanglei_jmr,转载请注明packagecn.huanglei_jmr.demo;importjava.util

下面我给出httpclient4的官网例子的详细解释:作者@author:huanglei_jmr,转载请注明

package cn.huanglei_jmr.demo;
import java.util.concurrent.CountDownLatch;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.concurrent.FutureCallback;
importorg.apache.http.impl.nio.client.DefaultHttpAsyncClient;
import org.apache.http.nio.client.HttpAsyncClient;
import org.apache.http.params.CoreConnectionPNames;

public class AsyncClientHttpExchangeFutureCallback {

 
    publicstatic void main(String[] args) throws Exception {
       HttpAsyncClient httpclient = new DefaultHttpAsyncClient();
       httpclient.getParams()
           .setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 3000)
           .setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,3000)
           .setIntParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE, 8 *1024)
           .setBooleanParameter(CoreConnectionPNames.TCP_NODELAY, true);

       httpclient.start();
       try {
           HttpGet[] requests = new HttpGet[] {
                   new HttpGet("http://www.apache.org/"),
                   new HttpGet("https://www.verisign.com/"),
                   new HttpGet("http://www.google.com/")
           };
           final CountDownLatch latch = newCountDownLatch(requests.length);
           for (final HttpGet request: requests) {
               httpclient.execute(request, new FutureCallback() {

                   public void completed(final HttpResponse response) {
                       latch.countDown();
                       System.out.println(request.getRequestLine() + "->" +response.getStatusLine());
                   }

                   public void failed(final Exception ex) {
                       latch.countDown();
                       System.out.println(request.getRequestLine() + "->" + ex);
                   }

                   public void cancelled() {
                       latch.countDown();
                       System.out.println(request.getRequestLine() + " cancelled");
                   }

               });
           }
           latch.await();
           System.out.println("Shutting down");
       } finally {
           httpclient.shutdown();
       }
       System.out.println("Done");
    }

}
2:


package cn.huanglei_jmr.demo;


import java.util.concurrent.Future;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
importorg.apache.http.impl.nio.client.DefaultHttpAsyncClient;
import org.apache.http.nio.client.HttpAsyncClient;

public class AsyncClientHttpExchange {
 
    publicstatic void main(String[] args) throws Exception {
       HttpAsyncClient httpclient = new DefaultHttpAsyncClient();
       httpclient.start();
       try {
           HttpGet request = new HttpGet("http://www.apache.org/");
           Future future = httpclient.execute(request, null);
           HttpResponse respOnse= future.get();
           //System.out.println(response.getAllHeaders());
           System.out.println("Response: " + response.getStatusLine());
           System.out.println("Shutting down");
       } finally {
           httpclient.shutdown();
       }
       System.out.println("Done");
    }

}
3:


package cn.huanglei_jmr.demo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.util.concurrent.Future;

import org.apache.http.HttpResponse;
importorg.apache.http.impl.nio.client.DefaultHttpAsyncClient;
import org.apache.http.nio.IOControl;
import org.apache.http.nio.client.HttpAsyncClient;
import org.apache.http.nio.client.methods.AsyncCharConsumer;
import org.apache.http.nio.client.methods.HttpAsyncMethods;
import org.apache.http.protocol.HttpContext;

public class AsyncClientHttpExchangeStreaming {
 
 
 
 private static FileOutputStream out;

 public static void main(String[] args) throwsException {
  HttpAsyncClient httpclient =new DefaultHttpAsyncClient();
  httpclient.start();
  try {
   File file =new File("d:/JAVA/jmr.html");
   out = newFileOutputStream(file);

   //excute(请求发送者,响应接受者,回调函数),它这个用的是泛型的那个execute方法,我这里不嫩直接得到response啊
   //嘿嘿,不是有“响应接受者”吗,通过它来拿响应的数据啊
   Future future= httpclient.execute(
     HttpAsyncMethods.createGet("http://localhost:8080/"),
     newMyResponseConsumer(), null);
   Booleanresult = future.get();
   if (result !=null && result.booleanValue()) {
    System.out.println("Requestsuccessfully executed");
   } else{
    System.out.println("Requestfailed");
   }
   System.out.println("Shuttingdown");
  } finally {
   httpclient.shutdown();
  }
  System.out.println("Done");
 }

 static class MyResponseConsumer extendsAsyncCharConsumer {

  @Override
  protected voidonResponseReceived(final HttpResponse response) {
  }

  @Override
       protected void onCharReceived(final CharBuffer buf, final IOControlioctrl) throws IOException {
   
//我一直改,想把tomcat的主页写到我的文件中去,相当于截取了一个网页,但是没成功,出现数组超标,但是下一个程序就给我解决了这个需求
   
   //我的猜测又对了buf.get();这个函数取一个自己,CharBuffer长度就少1,难怪用hasremain判断
   System.out.println(buf.length());
//   不写while(),输出一个< 一个字节,说明它是一个字节一个字节输出的,没有缓存
   System.out.println(buf.get());
   System.out.println(buf.length());
  
       }

  @Override
  protected voidreleaseResources() {
  }

  @Override
  protected BooleanbuildResult(final HttpContext context) {
   returnBoolean.TRUE;
  }

  
  private byte[]getBytes(CharBuffer cb) {
   Charset cs =Charset.forName("UTF-8");
   //CharBuffercb = CharBuffer.allocate(chars.length);
   //cb.put(chars);
   //cb.flip();
   ByteBuffer bb= cs.encode(cb);
   returnbb.array();
  }
 }


 //我自己在网上找的一个将byte[]转为char[]代码
 private char[] getChars(byte[] bytes) {
  Charset cs =Charset.forName("UTF-8");
  ByteBuffer bb =ByteBuffer.allocate(bytes.length);
  bb.put(bytes);
  bb.flip();
  CharBuffer cb =cs.decode(bb);
  return cb.array();
 }

}
4:


package cn.huanglei_jmr.demo;


import java.io.File;
import java.util.concurrent.Future;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.entity.ContentType;
importorg.apache.http.impl.nio.client.DefaultHttpAsyncClient;
import org.apache.http.nio.client.HttpAsyncClient;
import org.apache.http.nio.client.methods.ZeroCopyConsumer;
import org.apache.http.nio.client.methods.ZeroCopyPost;

public class ZeroCopyHttpExchange {
 
    publicstatic void main(String[] args) throws Exception {
       HttpAsyncClient httpclient = new DefaultHttpAsyncClient();
       httpclient.start();
       try {
           File upload = new File("d:/JAVA/jmr.html");
           File download = new File("d:/JAVA/hl.html");
           //怎么样查看的到我的上传文件就好了,没找到方法
           ZeroCopyPost httpost = new ZeroCopyPost("http://localhost:8080/", upload,
                   ContentType.create("text/plain"));
           
           ZeroCopyConsumer cOnsumer= new ZeroCopyConsumer(download) {

               @Override
               protected File process(
                       final HttpResponse response,
                       final File file,
                       final ContentType contentType) throws Exception {
                   if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK){
                       throw new ClientProtocolException("Upload failed: " +response.getStatusLine());
                   }
                   return file;
               }

           };
           Future future = httpclient.execute(httpost, consumer, null);
           File result = future.get();
           System.out.println("Response file length: " +result.length());
           System.out.println("Shutting down");
       } finally {
           httpclient.shutdown();
       }
       System.out.println("Done");
    }

}

 


推荐阅读
  • 本文探讨了在使用Apache Flink向Kafka发送数据过程中遇到的事务频繁失败问题,并提供了详细的解决方案,包括必要的配置调整和最佳实践。 ... [详细]
  • 本文详细介绍了Java中的代理模式,包括静态代理、JDK动态代理和Cglib动态代理的实现方式。通过一个火车票销售系统的实例,对比分析了三种代理模式的特点及其应用场景。 ... [详细]
  • 本文介绍了如何在Spring框架中配置和使用定时任务,包括初始化配置和动态启动定时器的方法。通过示例代码展示了如何利用Spring的TaskScheduler接口来创建和管理定时任务。 ... [详细]
  • 本文介绍如何使用Java实现AC自动机(Aho-Corasick算法),以实现高效的多模式字符串匹配。文章涵盖了Trie树和KMP算法的基础知识,并提供了一个详细的代码示例,包括构建Trie树、设置失败指针以及执行搜索的过程。 ... [详细]
  • Java 中静态和非静态嵌套类的区别 ... [详细]
  • PHP网站部署指南:从零开始搭建PHP网站
    本文提供了详细的步骤指导,帮助开发者在不同环境下成功部署PHP网站,包括在IIS和Apache服务器上的具体操作。 ... [详细]
  • 解决JavaWeb项目中因IPv6导致的IP转换错误
    本文探讨了在JavaWeb项目中,当尝试将客户端IP地址从字符串形式转换为整数时遇到的问题,并提供了详细的解决方案。具体问题表现为在本地环境中通过`request.getRemoteHost()`获取到的IP地址为IPv6格式,而非预期的IPv4格式。 ... [详细]
  • 本文介绍了一种算法,用于在一个给定的二叉树中找到一个节点,该节点的子树包含最大数量的值小于该节点的节点。如果存在多个符合条件的节点,可以选择任意一个。 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 本文探讨了在当前开发环境中使用Django 1.5和Python 3.3的情况下,如何解决AWS和GAE仅支持Python 2.7的问题,并提供了相应的解决方案。 ... [详细]
  • MVC框架下使用DataGrid实现时间筛选与枚举填充
    本文介绍如何在ASP.NET MVC项目中利用DataGrid组件增强搜索功能,具体包括使用jQuery UI的DatePicker插件添加时间筛选条件,并通过枚举数据填充下拉列表。 ... [详细]
  • 深入探讨Web服务器与动态语言的交互机制:CGI、FastCGI与PHP-FPM
    本文详细解析了Web服务器(如Apache、Nginx等)与动态语言(如PHP)之间通过CGI、FastCGI及PHP-FPM进行交互的具体过程,旨在帮助开发者更好地理解这些技术背后的原理。 ... [详细]
  • 本文详细探讨了 Java 中 com.codahale.metrics.servlets.AdminServlet.() 方法的实现与应用,并提供了多个实际项目中的代码示例,帮助开发者更好地理解和使用这一方法。 ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • Struts2框架构建指南
    本文详细介绍了如何使用Struts2(版本2.3.16.3)构建Web应用,包括必要的依赖库添加、配置文件设置以及简单的示例代码。Struts2是Apache软件基金会下的一个开源框架,用于简化Java Web应用程序的开发。 ... [详细]
author-avatar
自行脑补
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有