当我试图从 Java 客户端下载 JSON 文件 REST API URL http:URL?param-name=param-value 时,我收到的响应正文为空, Headers 为 Content-Length:0 ,状态码为200 .

我使用 RestTemplate/HttpURLConnection/Apache HttpClient 获取文件内容..但没有幸运

但是,文件可以从浏览器或任何其他 REST 客户端(如 SOAP )或命令行(如 wgetcurl )下载(我想因为所有这些工具都会自动检测输出mime类型) .

从Chrome ARC客户端发出请求时

请求和响应标头

请求

User-Agent:Mozilla / 5.0(Windows NT 6.1)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 48.0.2564.116 Safari / 537.36内容类型:text / plain; charset = utf-8接受:application / octet-stream Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en; q = 0.8 Cookie:JSESSIONID = 49LkWLLJMdNWhHRzh7FclGGSXvV2NKpbK0PYvCFp3vGFc2mwfpGh!-1680860256

回复

Cache-Control:no-cache,no-store,max-age = 0,must-revalidate日期:2016年2月24日星期三05:05:20 GMT Pragma:no-cache内容类型:长度:342950内容类型:应用程序/ octet-stream Expires:0 Content-Disposition:attachment; filename = DevicePrices.json X-XSS-Protection:1; mode = block X-Content-Type-Options:nosniff X-Powered-By:Servlet / 3.0 JSP / 2.2 X-Frame-Options:DENY

来自java客户端的请求和响应

请求 Headers

Header - > Accept-charset - > UTF-8 Header - > Accept - > application / octet-stream Header - > Accept-Encoding - > gzip,deflate,sdch Header - > Content-Type- - > text / plain; charset = utf-8 Headers - >接受语言 - > en-US,en; q = 0.8

响应 Headers

Headers - >缓存控制 - >无缓存,无存储,最大年龄= 0,必须重新验证 Headers - >日期 - >星期三,2016年2月24日04:32:39 GMT Headers - > Pragma - > no-cache Header - > Content-Length - > 0 Header - > Content-Type - > application / octet-stream Header - > Expires - > 0 Header - > Content-Disposition - >附件; filename = DevicePrices.json Headers - > X-XSS-Protection - > 1; mode = block Header - > X-Content-Type-Options - > nosniff Header - > X-Powered-By - > Servlet / 3.0 JSP / 2.2 Header - > X-Frame-Options - > DENY

我试图模拟请求 Headers ,但仍然是没有内容正文收到的相同问题 . 我很久以来就坚持这个 .

这种行为可能是什么原因?请建议我检索文件内容的方法 .

使用Apache HttpClient添加代码段:

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet get=new HttpGet(url);
get.setHeader("Accept-charset", "UTF-8");
get.setHeader("Content-Type", "text/plain; charset=utf-8");
get.setHeader("Accept","*/*");
get.setHeader("Accept-Encoding","gzip,deflate,sdch");
get.setHeader("Content-Type","text/plain;charset=utf-8");
get.setHeader("Accept-Language", "en-US,en;q=0.8");
HttpResponse resp=client.execute(get);
System.out.println(EntityUtils.toString(resp.getEntity()));

如果我使用get.setHeader(“Accept”,“application / json”),服务器响应406-Non Acceptable error .