热门标签 | 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");
    }

}

 


推荐阅读
  • 开发笔记:读《分布式一致性原理》JAVA客户端API操作2
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了读《分布式一致性原理》JAVA客户端API操作2相关的知识,希望对你有一定的参考价值。创 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • 使用Flutternewintegration_test进行示例集成测试?回答首先在dev下的p ... [详细]
  • java多线程获取线程返回结果
    我们在使用java多线程编写相关业务代码时,往往有这样一种情况,某个线程依赖于其他线程执行结果。也就是说,我们需要在一个线程中获取另一个线程的信息。可以分为两种情况,一种是轮询,一 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • 面向对象之3:封装的总结及实现方法
    本文总结了面向对象中封装的概念和好处,以及在Java中如何实现封装。封装是将过程和数据用一个外壳隐藏起来,只能通过提供的接口进行访问。适当的封装可以提高程序的理解性和维护性,增强程序的安全性。在Java中,封装可以通过将属性私有化并使用权限修饰符来实现,同时可以通过方法来访问属性并加入限制条件。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文介绍了协程的概念和意义,以及使用greenlet、yield、asyncio、async/await等技术实现协程编程的方法。同时还介绍了事件循环的作用和使用方法,以及如何使用await关键字和Task对象来实现异步编程。最后还提供了一些快速上手的示例代码。 ... [详细]
  • 阅读spring5源码DefaultSingletonBeanRegistry类遇到问题发现SpringBean中存在大量回调机制和aware接口,于是特意去了解 ... [详细]
  • 系列目录Guava1:概览Guava2:Basicutilities基本工具Guava3:集合CollectionsGuava4:GuavacacheGuava6:Concurre ... [详细]
  • Java多线程_Future设计模式
       Future模式的核心:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑。  Future模式有点类似于商品订单。在网上购物时,提交订单后,在收货的 ... [详细]
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社区 版权所有