我正在尝试发布在 java 中下载 pdf 文件的请求。我正在使用 - 试图修复导致方法被更改 - 其他人的代码,并且据我所见,在通过 Web 服务请求 pdf 文件之前,会检查内容类型。如果请求的内容类型正常,则调用服务以下载 pdf 文件。
这是检查内容类型的方法:
public boolean checkContentType(String serviceName, Map<String, String> params, String contentType) {
params.put(PARAM_SERVICE, serviceName);
if(log.isDebugEnabled()) {
log.debug("checkContentType for serviceName: " + serviceName + " - Params: " + params + " - contentType: " + contentType);
}
HttpClient httpclient = new HttpClient();
GetMethod get = new GetMethod(basicUrl);
get.setQueryString(ParameterUtil.getValuePairs(params));
log.info(get.getQueryString());
try {
httpclient.executeMethod(get);
if (get.getStatusCode() == HttpStatus.SC_OK) {
String respContentType = get.getResponseHeader("Content-Type").getValue();
log.info("Request Content type [" +contentType + "] is not in response content type: [" + respContentType + "]");
log.info(String.valueOf(contentType != null));
log.info(String.valueOf(StringUtils.containsIgnoreCase(respContentType, contentType)));
return contentType != null && StringUtils.containsIgnoreCase(respContentType, contentType);
} else {
log.error("Response status code KO: [" + get.getStatusCode() +"] from url: " + basicUrl + " with querystring: " + get.getQueryString());
}
} catch (Exception e) {
log.error("Unable to get http response from url: " + basicUrl + " with querystring: " + get.getQueryString() + ". Ex Msg:" + e.getMessage());
} finally {
get.releaseConnection();
}
return false;
}
当 Content-type 为“pdf”时,我在第二个条件下得到 false,但我怎么知道应该设置什么 Content-type?我得到这个日志:Request Content type [pdf] is not in response content type: [text/plain;charset=UTF-8]
。
我也尝试跳过内容类型检查并立即请求 pdf,但等待一段时间后,我得到了一个 16 kb 的 pdf,我无法打开。我尝试将内容类型设置为 text/plain;charset=UTF-8 但我仍然得到该日志。
由于我正在下载 pdf,它不应该是 PDF,还是应该在代码中设置我期望 pdf 内容类型的某个位置?