0

我正在尝试发布在 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 内容类型的某个位置?

4

1 回答 1

0

http 中 pdf 的内容类型是“application/pdf” - 您应该在代码中检查此内容类型。

现在查看您的输出-看起来服务器为您提供了“文本/纯”内容类型-因此在这种情况下,您将得到错误的结果作为此服务的结果。

尝试识别服务器 url,它将为您提供内容类型为“应用程序/pdf”或设置参数(查询字符串),它将为您提供 pdf 文件以测试您的代码。

于 2013-09-16T11:10:28.457 回答