How do I upgrade from DefaultHttpClient() to HttpClientBuilder.create().build()?

烈酒焚心 提交于 2019-12-25 03:07:34

问题


I have a routine which checks if a record has been indexed by Solr. I have a deprecated method of creating a HTTPClient which I'm trying to remove:

  • From

    DefaultHttpClient httpClient = new DefaultHttpClient();

  • To

    CloseableHttpClient httpClient = HttpClientBuilder.create().build();

The problem I now have is that after 2 call to the URL, the 3rd attempt seems to hang. I'm not quite sure what I'm missing if anyone can help please?

This is my complete method which I've extracted out into a test:

@Test
public void checkUntilRecordAvailable() {
    String output;

    String solrSingleJobURL = "http://solr01.prod.efinancialcareers.com:8080/solr/jobSearchCollection/select?q=id%3A7618769%0A&fl=*&wt=json&indent=true";

    CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    HttpGet httpGet = new HttpGet(solrSingleJobURL);

    StringBuilder jobResponseBuilder;
    Gson gson = new Gson();

    while (true) {
        System.out.print("WAITING FOR SOLR PARTIAL TO RUN " + solrSingleJobURL);

        jobResponseBuilder = new StringBuilder();

        try {
            HttpResponse response = httpClient.execute(httpGet);

            BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())));

            while ((output = br.readLine()) != null) {
                System.out.println(output);
                jobResponseBuilder.append(output);
            }

            JobResponse jobResponse = gson.fromJson(jobResponseBuilder.toString(), JobResponse.class);
            Long numberOfRecordsFound = jobResponse.getNumberOfRecordsFound();

            if (numberOfRecordsFound == 0) {
                System.out.println("- PAUSE FOR 10 SECONDS UNTIL NEXT CHECK");

                Thread.sleep(5000);
            } else {
                System.out.println(" RECORD FOUND ");
                httpClient.close();
                break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

回答1:


here is some code using the builders from 4.3 httpclient.. dont know if it helps .. I use skeleton from here. So , i wrap the creation of the httpclient in a runnable and post it to a que-processor for the EXEC. Note the runnable has your 'builder' stuff in it.

RequestConfig config = null;
private HttpClientContext context;

public void create(int method, final String url, final String data) {
    this.method = method;// GET, POST, HEAD, DELETE etc
    this.url = url;     
    this.data = data; //entity body of POST
    this.config = RequestConfig.custom()
         .setConnectionRequestTimeout(60 * 1000)
         .setSocketTimeout(60 * 1000)               
         .build();
    this.context = HttpClientContext.create();
    ConnectionMgr.getInstance().push(this);
    }

    //above creates a runnable that can be posted to a generic execution que

    //detls on run()  include builder asked about

public void run() {

    handler.sendMessage(Message.obtain(handler, HttpConnection.DID_START));
    CloseableHttpClient httpClient = HttpClients.custom()
    .setConnectionManager(YourConnectionMgr.getInstance())
    .addInterceptorLast(new HttpRequestInterceptor() {
         public void process(
           final HttpRequest request, 
           final HttpContext context) throws HttpException, IOException { 

if (request.getRequestLine().getMethod() == "POST"){
  request.addHeader("Content-Type", mimeType) ;}

}else if(request.getRequestLine().getMethod() == "GET" &&                                      !request.getRequestLine().getUri().toString().contains("ffmpeg")){
    request.addHeader("X-Parse-Application-Id", ParseApplication.key_appId);
}                                   

 }) .build();


来源:https://stackoverflow.com/questions/22633072/how-do-i-upgrade-from-defaulthttpclient-to-httpclientbuilder-create-build

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!