@Override
  public void process(final HttpRequest request, final HttpContext context)
      throws HttpException, IOException {
    Args.notNull(request, "HTTP request");

    final String method = request.getRequestLine().getMethod();
    if (method.equalsIgnoreCase("CONNECT")) {
      request.setHeader(PROXY_CONN_DIRECTIVE, HTTP.CONN_KEEP_ALIVE);
      return;
    }

    final HttpClientContext clientContext = HttpClientContext.adapt(context);

    // Obtain the client connection (required)
    final RouteInfo route = clientContext.getHttpRoute();
    if (route == null) {
      this.log.debug("Connection route not set in the context");
      return;
    }

    if (route.getHopCount() == 1 || route.isTunnelled()) {
      if (!request.containsHeader(HTTP.CONN_DIRECTIVE)) {
        request.addHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_KEEP_ALIVE);
      }
    }
    if (route.getHopCount() == 2 && !route.isTunnelled()) {
      if (!request.containsHeader(PROXY_CONN_DIRECTIVE)) {
        request.addHeader(PROXY_CONN_DIRECTIVE, HTTP.CONN_KEEP_ALIVE);
      }
    }
  }
  @Override
  public void process(final HttpRequest request, final HttpContext context)
      throws HttpException, IOException {

    final HttpClientContext clientContext = HttpClientContext.adapt(context);
    final RequestConfig requestConfig = clientContext.getRequestConfig();

    /* Signal support for Accept-Encoding transfer encodings. */
    if (!request.containsHeader("Accept-Encoding") && requestConfig.isContentCompressionEnabled()) {
      request.addHeader("Accept-Encoding", acceptEncoding);
    }
  }
  @Override
  public void process(final HttpRequest request, final HttpContext context)
      throws HttpException, IOException {
    Args.notNull(request, "HTTP request");

    if (!request.containsHeader(HTTP.EXPECT_DIRECTIVE)) {
      if (request instanceof HttpEntityEnclosingRequest) {
        final ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
        final HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
        // Do not send the expect header if request body is known to be empty
        if (entity != null
            && entity.getContentLength() != 0
            && !ver.lessEquals(HttpVersion.HTTP_1_0)) {
          final HttpClientContext clientContext = HttpClientContext.adapt(context);
          final RequestConfig config = clientContext.getRequestConfig();
          if (config.isExpectContinueEnabled()) {
            request.addHeader(HTTP.EXPECT_DIRECTIVE, HTTP.EXPECT_CONTINUE);
          }
        }
      }
    }
  }
Example #4
0
  public void request2(String uri, int reqNum, int reqTerm) throws Exception {
    HttpClientContext context = HttpClientContext.create();
    HttpClientConnectionManager connManager = new BasicHttpClientConnectionManager();
    HttpRoute route = new HttpRoute(new HttpHost(uri, 80));
    // Request new connection. This can be a long process
    if (reqNum == 0) {
      System.out.println(
          String.format("request to %s infinite times with term '%d' ms", uri, reqTerm));
    } else {
      System.out.println(
          String.format("request to %s '%d' times with term '%d' ms", uri, reqNum, reqTerm));
    }
    int i = 0, tick = 0;

    while (true) {
      usleep(reqTerm);
      tick = (int) (Math.random() * 10) % 2;
      if (tick == 0) {
        continue;
      }
      System.out.println("111111111");
      ConnectionRequest connRequest = connManager.requestConnection(route, null);
      // Wait for connection up to 10 sec
      HttpClientConnection conn = connRequest.get(10, TimeUnit.SECONDS);
      System.out.println("222222222");
      try {
        if (!conn.isOpen()) // If not open
        {
          System.out.println("333333333");
          // establish connection based on its route info
          connManager.connect(conn, route, 1000, context);
          // and mark it as route complete
          connManager.routeComplete(conn, route, context);
        }
        // Do useful things with the connection.
        System.out.println("request " + uri);
        System.out.println(
            "--> response status  = " + conn.receiveResponseHeader().getStatusLine());
      } finally {
        connManager.releaseConnection(conn, null, 1, TimeUnit.MINUTES);
      }

      System.out.println("----------------------------------------");
      if (reqNum != 0 && reqNum < ++i) {
        break;
      }
    }
  }