当我试图从 Java
客户端下载 JSON
文件 REST API URL
http:URL?param-name=param-value 时,我收到的响应正文为空, Headers 为 Content-Length:0
,状态码为200 .
我使用 RestTemplate/HttpURLConnection/Apache HttpClient
获取文件内容..但没有幸运
但是,文件可以从浏览器或任何其他 REST
客户端(如 SOAP
)或命令行(如 wget
或 curl
)下载(我想因为所有这些工具都会自动检测输出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 .