/**
   * 构造请求的方法,如post,get,header等<br>
   * 设置请求参数,如超时时间
   *
   * @param url 请求的URL
   * @param method 请求的方法
   * @param postdata post的数据
   * @param headers 请求头
   * @return
   */
  protected HttpUriRequest getHttpUriRequest(
      String url, String method, Map<String, String> postdata, Map<String, String> headers) {
    RequestBuilder requestBuilder = selectRequestMethod(method, postdata, headers).setUri(url);

    requestBuilder.addHeader("Accept", "*/*");
    requestBuilder.addHeader("Connection", "keep-alive");
    if (headers != null) {
      for (Map.Entry<String, String> headerEntry : headers.entrySet()) {
        requestBuilder.addHeader(headerEntry.getKey(), headerEntry.getValue());
      }
    }

    int timeout = 45000; // 超时时间
    RequestConfig.Builder requestConfigBuilder =
        RequestConfig.custom()
            .setConnectionRequestTimeout(timeout)
            .setSocketTimeout(timeout)
            .setConnectTimeout(timeout)
            // .setRedirectsEnabled(false)//禁止自动跳转
            .setCookieSpec(CookieSpecs.BEST_MATCH);

    if (null != host && !"".equals(host) && port > 10) {
      HttpHost proxy = new HttpHost(host, port);
      requestConfigBuilder.setProxy(proxy);
    }

    requestBuilder.setConfig(requestConfigBuilder.build());
    return requestBuilder.build();
  }
示例#2
0
  /**
   * Get方法传送消息
   *
   * @param url 连接的URL
   * @param queryString 请求参数串
   * @return 服务器返回的信息
   * @throws Exception
   */
  public String httpGet(String url, String queryString) throws Exception {

    String responseData = null;
    if (queryString != null && !queryString.equals("")) {
      url += "?" + queryString;
    }
    RequestBuilder requestBuilder = RequestBuilder.get().setUri(url);
    log.info("QHttpClient httpGet [1] url = " + url);
    RequestConfig requestConfig =
        RequestConfig.custom()
            .setSocketTimeout(new Integer(CONNECTION_TIMEOUT))
            .setCookieSpec(CookieSpecs.IGNORE_COOKIES)
            .build();
    requestBuilder.setConfig(requestConfig);
    HttpResponse response;
    HttpGet httpGet = (HttpGet) requestBuilder.build();
    response = httpClient.execute(httpGet);
    try {
      log.info("QHttpClient httpGet [2] StatusLine : " + response.getStatusLine());
      responseData = EntityUtils.toString(response.getEntity());
      log.info("QHttpClient httpGet [3] Response = " + responseData);
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      httpGet.abort();
    }
    return responseData;
  }
示例#3
0
 /**
  * Called primarily from HTTPMethod to do the bulk of the execution. Assumes HTTPMethod has
  * inserted its headers into request.
  *
  * @param method
  * @param methoduri
  * @param rb
  * @return Request+Response pair
  * @throws HTTPException
  */
 ExecState execute(HTTPMethod method, URI methoduri, RequestBuilder rb) throws HTTPException {
   this.execution = new ExecState();
   this.requestURI = methoduri;
   AuthScope methodscope = HTTPAuthUtil.uriToAuthScope(methoduri);
   AuthScope target = HTTPAuthUtil.authscopeUpgrade(this.scope, methodscope);
   synchronized (this) { // keep coverity happy
     // Merge Settings;
     Settings merged = HTTPUtil.merge(globalsettings, localsettings);
     if (!this.cachevalid) {
       RequestConfig.Builder rcb = RequestConfig.custom();
       this.cachedconfig = configureRequest(rcb, merged);
       HttpClientBuilder cb = HttpClients.custom();
       configClient(cb, merged);
       setAuthenticationAndProxy(cb);
       this.cachedclient = cb.build();
       rb.setConfig(this.cachedconfig);
       this.cachevalid = true;
     }
   }
   this.execution.request = (HttpRequestBase) rb.build();
   try {
     HttpHost targethost = HTTPAuthUtil.authscopeToHost(target);
     this.execution.response =
         cachedclient.execute(targethost, this.execution.request, this.sessioncontext);
   } catch (IOException ioe) {
     throw new HTTPException(ioe);
   }
   return this.execution;
 }
  /**
   * Build a new Apache's {@link org.apache.http.client.methods.HttpUriRequest} from Jersey's {@link
   * org.glassfish.jersey.client.ClientRequest}
   *
   * <p>Convert a method, URI, body, headers and override a user-agent if necessary
   *
   * @param jerseyRequest representation of an HTTP request in Jersey
   * @return a new {@link org.apache.http.client.methods.HttpUriRequest}
   */
  private HttpUriRequest buildApacheRequest(ClientRequest jerseyRequest) {
    final RequestBuilder builder =
        RequestBuilder.create(jerseyRequest.getMethod())
            .setUri(jerseyRequest.getUri())
            .setEntity(getHttpEntity(jerseyRequest));
    for (String headerName : jerseyRequest.getHeaders().keySet()) {
      builder.addHeader(headerName, jerseyRequest.getHeaderString(headerName));
    }

    final Optional<RequestConfig> requestConfig = addJerseyRequestConfig(jerseyRequest);
    requestConfig.ifPresent(builder::setConfig);

    return builder.build();
  }
  private void assertBuild(final Charset charset) throws Exception {
    final RequestBuilder requestBuilder = RequestBuilder.create("GET").setCharset(charset);
    requestBuilder.setUri("https://somehost.com/stuff");
    requestBuilder.addParameters(createParameters());

    final String encodedData1 = URLEncoder.encode("\"1\u00aa position\"", charset.displayName());
    final String encodedData2 = URLEncoder.encode("Jos\u00e9 Abra\u00e3o", charset.displayName());

    final String uriExpected =
        String.format(
            "https://somehost.com/stuff?parameter1=value1&parameter2=%s&parameter3=%s",
            encodedData1, encodedData2);

    final HttpUriRequest request = requestBuilder.build();
    Assert.assertEquals(uriExpected, request.getURI().toString());
  }
示例#6
0
  private <B, R> R executeRequest(
      RequestSpec requestSpec,
      PathParams pathParams,
      B requestBody,
      Class<R> responseType,
      int expectedStatus) {
    String url =
        String.format(
            ADMIN_URL_PREFIX + requestSpec.path(pathParams), scheme, host, port, urlPathPrefix);
    RequestBuilder requestBuilder =
        RequestBuilder.create(requestSpec.method().getName()).setUri(url);

    if (requestBody != null) {
      requestBuilder.setEntity(jsonStringEntity(Json.write(requestBody)));
    }

    String responseBodyString = safelyExecuteRequest(url, expectedStatus, requestBuilder.build());

    return responseType == Void.class ? null : Json.read(responseBodyString, responseType);
  }
示例#7
0
 /**
  * Post方法传送消息
  *
  * @param url 连接的URL
  * @param queryString 请求参数串
  * @return 服务器返回的信息
  * @throws Exception
  */
 public String httpPost(String url, String queryString) throws Exception {
   String responseData = null;
   URI tmpUri = new URI(url);
   URI uri =
       new URI(
           tmpUri.getScheme(),
           null,
           tmpUri.getHost(),
           tmpUri.getPort(),
           tmpUri.getPath(),
           queryString,
           null);
   log.info("QHttpClient httpPost [1] url = " + uri.toURL());
   RequestBuilder requestBuilder = RequestBuilder.post().setUri(uri);
   RequestConfig requestConfig =
       RequestConfig.custom()
           .setSocketTimeout(new Integer(CONNECTION_TIMEOUT))
           .setCookieSpec(CookieSpecs.IGNORE_COOKIES)
           .build();
   requestBuilder.setConfig(requestConfig);
   HttpPost httpPost = (HttpPost) requestBuilder.build();
   if (queryString != null && !queryString.equals("")) {
     StringEntity reqEntity = new StringEntity(queryString);
     // 设置类型
     reqEntity.setContentType("application/x-www-form-urlencoded");
     // 设置请求的数据
     httpPost.setEntity(reqEntity);
   }
   try {
     HttpResponse response = httpClient.execute(httpPost);
     log.info("QHttpClient httpPost [2] StatusLine = " + response.getStatusLine());
     responseData = EntityUtils.toString(response.getEntity());
     log.info("QHttpClient httpPost [3] responseData = " + responseData);
   } catch (Exception e) {
     e.printStackTrace();
   } finally {
     httpPost.abort();
   }
   return responseData;
 }
 @Override
 public Page download(Request request, Task task) {
   Site site = null;
   if (task != null) {
     site = task.getSite();
   }
   Set<Integer> acceptStatCode;
   String charset = null;
   Map<String, String> headers = null;
   if (site != null) {
     acceptStatCode = site.getAcceptStatCode();
     charset = site.getCharset();
     headers = site.getHeaders();
   } else {
     acceptStatCode = Sets.newHashSet(200);
   }
   logger.info("downloading page " + request.getUrl());
   RequestBuilder requestBuilder = RequestBuilder.get().setUri(request.getUrl());
   if (headers != null) {
     for (Map.Entry<String, String> headerEntry : headers.entrySet()) {
       requestBuilder.addHeader(headerEntry.getKey(), headerEntry.getValue());
     }
   }
   RequestConfig.Builder requestConfigBuilder =
       RequestConfig.custom()
           .setConnectionRequestTimeout(site.getTimeOut())
           .setSocketTimeout(site.getTimeOut())
           .setConnectTimeout(site.getTimeOut())
           .setCookieSpec(CookieSpecs.BEST_MATCH);
   if (site != null && site.getHttpProxy() != null) {
     requestConfigBuilder.setProxy(site.getHttpProxy());
   }
   requestBuilder.setConfig(requestConfigBuilder.build());
   CloseableHttpResponse httpResponse = null;
   try {
     httpResponse = getHttpClient(site).execute(requestBuilder.build());
     int statusCode = httpResponse.getStatusLine().getStatusCode();
     if (acceptStatCode.contains(statusCode)) {
       // charset
       if (charset == null) {
         String value = httpResponse.getEntity().getContentType().getValue();
         charset = UrlUtils.getCharset(value);
       }
       return handleResponse(request, charset, httpResponse, task);
     } else {
       logger.warn("code error " + statusCode + "\t" + request.getUrl());
       return null;
     }
   } catch (IOException e) {
     logger.warn("download page " + request.getUrl() + " error", e);
     if (site.getCycleRetryTimes() > 0) {
       return addToCycleRetry(request, site);
     }
     return null;
   } finally {
     try {
       if (httpResponse != null) {
         // ensure the connection is released back to pool
         EntityUtils.consume(httpResponse.getEntity());
       }
     } catch (IOException e) {
       logger.warn("close response fail", e);
     }
   }
 }
  /** 传入加入参数post 参数的url */
  public CrawlResultPojo crawl4Post(UrlPojo urlPojo) {
    if (urlPojo == null) {
      return null;
    }
    CrawlResultPojo crawlResultPojo = new CrawlResultPojo();
    CloseableHttpResponse response1 = null;
    BufferedReader br = null;
    try {

      RequestBuilder rb = RequestBuilder.post().setUri(new URI(urlPojo.getUrl()));
      /* HttpUriRequest urlRequest = RequestBuilder.post()
      .setUri(new URI(urlPojo.getUrl()))
      .addParameter("IDToken1", "username")
      .addParameter("IDToken2", "password")
      .build();*/
      Map<String, Object> paramsMap = urlPojo.getParamsMap();
      if (paramsMap != null) {
        for (Entry<String, Object> entry : paramsMap.entrySet()) {
          rb.addParameter(entry.getKey(), entry.getValue().toString());
        }
      }
      HttpUriRequest httpRequst = rb.build();
      response1 = httpclient.execute(httpRequst);

      HttpEntity entity = response1.getEntity();
      InputStreamReader isr = new InputStreamReader(entity.getContent(), "utf-8");
      br = new BufferedReader(isr);

      String line = null;
      StringBuilder stringBuilder = new StringBuilder();
      while ((line = br.readLine()) != null) {
        stringBuilder.append(line + "\n");
      }
      crawlResultPojo.setSuccess(true);
      crawlResultPojo.setPageContent(stringBuilder.toString());
      return crawlResultPojo;

    } catch (Exception e) {
      e.printStackTrace();
      crawlResultPojo.setSuccess(false);
    } finally {
      if (response1 != null) {
        try {
          response1.close();
        } catch (IOException e1) {
          // TODO Auto-generated catch block
          e1.printStackTrace();
        }
      }
      if (br != null) {
        try {
          br.close();
        } catch (IOException e1) {
          // TODO Auto-generated catch block
          e1.printStackTrace();
        }
      }
    }

    return crawlResultPojo;
  }