下面列出了怎么用org.apache.http.client.methods.HttpEntityEnclosingRequestBase的API类实例代码及写法,或者点击链接到github查看源代码。
private void addPostParams(HttpEntityEnclosingRequestBase request) throws UnsupportedEncodingException {
final MultipartEntityBuilder multipartBuilder = MultipartEntityBuilder.create();
List<NameValuePair> formParams = new ArrayList<>();
postVariables.forEach((name, values) -> values.forEach(value -> {
if (multipart) {
if (value.startsWith("@")) {
File f = new File(value.substring(1));
multipartBuilder.addBinaryBody(name, f, ContentType.DEFAULT_BINARY, f.getName());
} else {
multipartBuilder.addTextBody(name, value);
}
} else {
formParams.add(new BasicNameValuePair(name, value));
}
}));
if (multipart) {
request.setEntity(multipartBuilder.build());
} else {
request.setEntity(new UrlEncodedFormEntity(formParams));
}
}
private void log(HttpEntityEnclosingRequestBase request) {
if (logger != null) {
List<String> headers = new ArrayList<>();
for (Header h : request.getAllHeaders()) {
headers.add(h.toString());
}
byte[] cnt = null;
InputStream s;
try {
s = request.getEntity().getContent();
cnt = IOUtils.toByteArray(s);
s.close();
} catch (Exception e) {
}
logger.logRequest(request.getMethod(), request.getURI().toString(), headers, cnt);
}
}
/**
* Method posts request payload
*
* @param request
* @param payload
* @return
*/
protected HttpResponse sendPayload(HttpEntityEnclosingRequestBase request, byte[] payload, HttpHost proxy) {
HttpResponse response = null;
boolean ok = false;
int tryCount = 0;
while (!ok) {
try {
tryCount++;
HttpClient httpclient = new DefaultHttpClient();
if(proxy != null) {
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
request.setEntity(new ByteArrayEntity(payload));
log(request);
response = httpclient.execute(request);
ok = true;
} catch(IOException ioe) {
if (tryCount <= retryCount) {
ok = false;
} else {
throw new EFhirClientException("Error sending HTTP Post/Put Payload: "+ioe.getMessage(), ioe);
}
}
}
return response;
}
private void log(HttpEntityEnclosingRequestBase request) {
if (logger != null) {
List<String> headers = new ArrayList<>();
for (Header h : request.getAllHeaders()) {
headers.add(h.toString());
}
byte[] cnt = null;
InputStream s;
try {
s = request.getEntity().getContent();
cnt = IOUtils.toByteArray(s);
s.close();
} catch (Exception e) {
}
logger.logRequest(request.getMethod(), request.getURI().toString(), headers, cnt);
}
}
/**
* Method posts request payload
*
* @param request
* @param payload
* @return
*/
protected HttpResponse sendPayload(HttpEntityEnclosingRequestBase request, byte[] payload, HttpHost proxy) {
HttpResponse response = null;
boolean ok = false;
int tryCount = 0;
while (!ok) {
try {
tryCount++;
HttpClient httpclient = new DefaultHttpClient();
if(proxy != null) {
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
request.setEntity(new ByteArrayEntity(payload));
log(request);
response = httpclient.execute(request);
ok = true;
} catch(IOException ioe) {
if (tryCount <= retryCount) {
ok = false;
} else {
throw new EFhirClientException("Error sending HTTP Post/Put Payload: "+ioe.getMessage(), ioe);
}
}
}
return response;
}
private void log(HttpEntityEnclosingRequestBase request) {
if (logger != null) {
List<String> headers = new ArrayList<>();
for (Header h : request.getAllHeaders()) {
headers.add(h.toString());
}
byte[] cnt = null;
InputStream s;
try {
s = request.getEntity().getContent();
cnt = IOUtils.toByteArray(s);
s.close();
} catch (Exception e) {
}
logger.logRequest(request.getMethod(), request.getURI().toString(), headers, cnt);
}
}
/**
* Method posts request payload
*
* @param request
* @param payload
* @return
*/
protected HttpResponse sendPayload(HttpEntityEnclosingRequestBase request, byte[] payload, HttpHost proxy) {
HttpResponse response = null;
boolean ok = false;
int tryCount = 0;
while (!ok) {
try {
tryCount++;
HttpClient httpclient = new DefaultHttpClient();
if(proxy != null) {
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
request.setEntity(new ByteArrayEntity(payload));
log(request);
response = httpclient.execute(request);
ok = true;
} catch(IOException ioe) {
if (tryCount <= retryCount) {
ok = false;
} else {
throw new EFhirClientException("Error sending HTTP Post/Put Payload: "+ioe.getMessage(), ioe);
}
}
}
return response;
}
@Override
public final CloseableHttpResponse execute(
final Dict request
) throws IOException {
final HttpEntityEnclosingRequestBase base =
new HttpEntityEnclosingRequestBase() {
@Override
public String getMethod() {
//@checkstyle RequireThisCheck (1 lines)
return new Method.Of(request).asString();
}
};
final URI uri = new RequestUri.Of(request).uri();
base.setConfig(this.config);
base.setURI(uri);
base.setEntity(new StringEntity(new Body.Of(request).asString()));
for (final Kvp header : new Headers.Of(request)) {
base.addHeader(header.key(), header.value());
}
return this.origin.get().execute(base);
}
private HttpEntity toApacheHttpEntity(RequestTemplate requestTemplate)
throws IOException, URISyntaxException {
final List<HttpUriRequest> request = new ArrayList<>(1);
BDDMockito.given(this.httpClient.execute(ArgumentMatchers.<HttpUriRequest>any()))
.will(new Answer<HttpResponse>() {
@Override
public HttpResponse answer(InvocationOnMock invocationOnMock)
throws Throwable {
request.add((HttpUriRequest) invocationOnMock.getArguments()[0]);
return new BasicHttpResponse(new BasicStatusLine(
new ProtocolVersion("http", 1, 1), 200, null));
}
});
new ApacheHttpClient(this.httpClient).execute(
requestTemplate.resolve(new HashMap<>()).request(),
new feign.Request.Options());
HttpUriRequest httpUriRequest = request.get(0);
return ((HttpEntityEnclosingRequestBase) httpUriRequest).getEntity();
}
private HttpResponse makeHTTPConnection() throws IOException, NullPointerException {
if (fileURI == null) throw new NullPointerException("No file URI specified");
HttpClient client = HttpClientBuilder.create().build();
HttpRequestBase requestMethod = httpRequestMethod.getRequestMethod();
requestMethod.setURI(fileURI);
BasicHttpContext localContext = new BasicHttpContext();
localContext.setAttribute(HttpClientContext.COOKIE_STORE, getWebDriverCookies(driver.manage().getCookies()));
requestMethod.setHeader("User-Agent", getWebDriverUserAgent());
if (null != urlParameters && (
httpRequestMethod.equals(RequestType.PATCH) ||
httpRequestMethod.equals(RequestType.POST) ||
httpRequestMethod.equals(RequestType.PUT))
) {
((HttpEntityEnclosingRequestBase) requestMethod).setEntity(new UrlEncodedFormEntity(urlParameters));
}
return client.execute(requestMethod, localContext);
}
public void sign(HttpRequestBase req) throws IOException {
String payload = null;
Charset charset = Charset.defaultCharset();
if (HttpEntityEnclosingRequestBase.class.isAssignableFrom(req.getClass())) {
HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) req;
HttpEntity entity = requestBase.getEntity();
if (entity.getContentLength() > 0) {
if (!entity.isRepeatable()) {
throw new IOException(
"The signer needs to read the request payload but the input stream of this request cannot be read multiple times. Please provide the payload using a separate argument or ensure that the entity is repeatable.");
}
ContentType contentType = ContentType.get(entity);
charset = contentType.getCharset();
payload = EntityUtils.toString(entity, contentType.getCharset());
}
}
String authHeader = OAuth.getAuthorizationHeader(req.getURI(), req.getMethod(), payload, charset, consumerKey, signingKey);
req.setHeader(OAuth.AUTHORIZATION_HEADER_NAME, authHeader);
}
@Override
public ODataEntityUpdateResponse<E> execute() {
final InputStream input = getPayload();
((HttpEntityEnclosingRequestBase) request).setEntity(URIUtils.buildInputStreamEntity(odataClient, input));
try {
final HttpResponse httpResponse = doExecute();
final ODataEntityUpdateResponseImpl response =
new ODataEntityUpdateResponseImpl(odataClient, httpClient, httpResponse);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_NO_CONTENT) {
response.close();
}
return response;
} finally {
IOUtils.closeQuietly(input);
}
}
public static HttpResponse redirectResponse(HttpResponse httpResponse,
HttpEntityEnclosingRequestBase request,
CloseableHttpAsyncClient httpclient)
throws ExecutionException, InterruptedException {
HttpResponse result = null;
Header[] headers = httpResponse.getHeaders(HttpHeaders.LOCATION);
for (Header header : headers) {
if (header.getName().equalsIgnoreCase(HttpHeaders.LOCATION)) {
String newUrl = header.getValue();
request.setURI(URI.create(newUrl));
Future<HttpResponse> future = httpclient.execute(request, null);
result = future.get();
break;
}
}
if (result == null) {
return httpResponse;
}
return result;
}
protected void doHandle(String uriId,HttpUriRequest request,Object result){
if(this.isError(result)){
String content = null;
if(request instanceof HttpEntityEnclosingRequestBase){
HttpEntityEnclosingRequestBase request_base = (HttpEntityEnclosingRequestBase)request;
HttpEntity entity = request_base.getEntity();
//MULTIPART_FORM_DATA 请求类型判断
if(entity.getContentType().toString().indexOf(ContentType.MULTIPART_FORM_DATA.getMimeType()) == -1){
try {
content = EntityUtils.toString(entity);
} catch (Exception e) {
e.printStackTrace();
}
}
if(logger.isErrorEnabled()){
logger.error("URI[{}] {} Content:{} Result:{}",
uriId,
request.getURI(),
content == null ? "multipart_form_data" : content,
result == null? null : JsonUtil.toJSONString(result));
}
}
this.handle(uriId,request.getURI().toString(),content,result);
}
}
private void assertRequestWithContent(HttpRequestBase request, String method, String url, String content)
throws IOException
{
assertEquals(content, IOUtils.toString(((HttpEntityEnclosingRequestBase) request).getEntity().getContent(),
StandardCharsets.UTF_8));
assertRequest(request, method, url);
}
@ParameterizedTest
@MethodSource("successfulEmptyEnclosingEntityRequestCreation")
void testSuccessfulEmptyEnclosingEntityRequestCreation(HttpMethod httpMethod,
Class<? extends HttpRequestBase> requestClass)
{
StringEntity entity = new StringEntity("body", StandardCharsets.UTF_8);
HttpEntityEnclosingRequestBase request = httpMethod.createEntityEnclosingRequest(URI_EXAMPLE, entity);
assertThat(request, instanceOf(requestClass));
assertEquals(URI_EXAMPLE, request.getURI());
assertEquals(entity, request.getEntity());
}
private void setEntityIfGiven(HttpEntityEnclosingRequestBase request, Object entity) {
if (entity != null) {
if (entity instanceof File) {
request.setEntity(new FileEntity((File) entity));
} else {
request.setEntity(new StringEntity((String) entity, Charset.defaultCharset()));
}
}
}
private static void setEntityIfNonEmptyBody(HttpEntityEnclosingRequestBase httpRequest,
Request<?> request) throws AuthFailureError {
byte[] body = request.getBody();
if (body != null) {
HttpEntity entity = new ByteArrayEntity(body);
httpRequest.setEntity(entity);
}
}
/**
* @param resourceFormat
* @param options
* @return
*/
protected <T extends Resource> ResourceRequest<T> issueResourceRequest(String resourceFormat, HttpUriRequest request, byte[] payload, List<Header> headers) {
configureFhirRequest(request, resourceFormat, headers);
HttpResponse response = null;
if(request instanceof HttpEntityEnclosingRequest && payload != null) {
response = sendPayload((HttpEntityEnclosingRequestBase)request, payload, proxy);
} else if (request instanceof HttpEntityEnclosingRequest && payload == null){
throw new EFhirClientException("PUT and POST requests require a non-null payload");
} else {
response = sendRequest(request);
}
T resource = unmarshalReference(response, resourceFormat);
return new ResourceRequest<T>(resource, response.getStatusLine().getStatusCode(), getLocationHeader(response));
}
/**
* Method posts request payload
*
* @param request
* @param payload
* @return
*/
protected HttpResponse sendPayload(HttpEntityEnclosingRequestBase request, byte[] payload) {
HttpResponse response = null;
try {
log(request);
HttpClient httpclient = new DefaultHttpClient();
request.setEntity(new ByteArrayEntity(payload));
response = httpclient.execute(request);
log(response);
} catch(IOException ioe) {
throw new EFhirClientException("Error sending HTTP Post/Put Payload: "+ioe.getMessage(), ioe);
}
return response;
}
private static void setEntityIfNonEmptyBody(HttpEntityEnclosingRequestBase httpRequest, Request<?> request) throws AuthFailureError {
byte[] body = request.getBody();
if (body != null) {
HttpEntity entity = new ByteArrayEntity(body);
httpRequest.setEntity(entity);
}
}
private static InputStream doPostOrPut(
String contentType,
String acceptType,
String content,
String authorization,
HttpEntityEnclosingRequestBase request) throws IOException {
request.setHeader(HttpHeaders.CONTENT_TYPE, contentType);
request.setHeader(HttpHeaders.ACCEPT, acceptType);
if (content != null) {
request.setEntity(new StringEntity(content));
}
return doRequest(authorization, request);
}
private static InputStream doPostOrPut(String contentType, String acceptType, String content, String authorization, HttpEntityEnclosingRequestBase request) throws IOException {
request.setHeader(HttpHeaders.CONTENT_TYPE, contentType);
request.setHeader(HttpHeaders.ACCEPT, acceptType);
if (content != null) {
request.setEntity(new StringEntity(content));
}
return doRequest(authorization, request);
}
private static void setEntityIfNonEmptyBody(HttpEntityEnclosingRequestBase httpRequest,
Request<?> request) throws AuthFailureError {
byte[] body = request.getBody();
if (body != null) {
HttpEntity entity = new ByteArrayEntity(body);
httpRequest.setEntity(entity);
}
}
/**
* Method posts request payload
*
* @param request
* @param payload
* @return
*/
protected HttpResponse sendPayload(HttpEntityEnclosingRequestBase request, byte[] payload) {
HttpResponse response = null;
try {
log(request);
HttpClient httpclient = new DefaultHttpClient();
request.setEntity(new ByteArrayEntity(payload));
response = httpclient.execute(request);
log(response);
} catch(IOException ioe) {
throw new EFhirClientException("Error sending HTTP Post/Put Payload: "+ioe.getMessage(), ioe);
}
return response;
}
private HttpEntityEnclosingRequestBase addEntityToRequestBase(HttpEntityEnclosingRequestBase requestBase,
HttpEntity entity) {
if (entity != null) {
requestBase.setEntity(entity);
}
return requestBase;
}
private ClientCommonResponse executeWithoutScenarioVariables(ClientHttpRequest request) throws Exception {
URI uri = new URIBuilder(request.getResource()).build();
HttpRequestBase httpRequest = HttpRequestCreator.createRequest(request.getMethod(), uri, request.getTestIdHeaderName(), request.getTestId());
if (httpRequest instanceof HttpEntityEnclosingRequestBase && request.getBody() != null) {
HttpEntity httpEntity = new StringEntity((String) request.getBody(), ContentType.APPLICATION_JSON);
((HttpEntityEnclosingRequestBase) httpRequest).setEntity(httpEntity);
}
return execute(httpRequest, request.getHeaders(), request.getUseResponseAsBase64());
}
private static void setEntityIfNonEmptyBody(HttpEntityEnclosingRequestBase httpRequest,
Request<?> request) throws AuthFailureError {
byte[] body = request.getBody();
if (body != null) {
HttpEntity entity = new ByteArrayEntity(body);
httpRequest.setEntity(entity);
}
}
protected void setEntity(HttpRequestBase request , byte[] content){
if((request instanceof HttpEntityEnclosingRequestBase) && content != null){
ContentType contentType = ContentType.create("application/json", "UTF-8");
HttpEntity httpEntity = new ByteArrayEntity(content, contentType);
((HttpEntityEnclosingRequestBase)request).setEntity(httpEntity);
}
}
protected void setEntity(HttpRequestBase request , byte[] content){
if((request instanceof HttpEntityEnclosingRequestBase) && content != null){
ContentType contentType = ContentType.create("application/json", "UTF-8");
HttpEntity httpEntity = new ByteArrayEntity(content, contentType);
((HttpEntityEnclosingRequestBase)request).setEntity(httpEntity);
}
}