/** * 构造请求的方法,如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(); }
/** * 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 addCommonHeaders(RequestBuilder requestBuilder) { requestBuilder.addHeader("x-ms-version", "2014-02-01"); requestBuilder.addHeader("Accept", "application/json"); }
@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); } } }