这个函数是由spring httpClient完成的,但问题仍然存在,我不知道为什么它会通过HttpURLConnection得到405
在这个项目中(webservice)。我的服务器想要从其他对象存储服务器下载一个文件。所以我使用下面的代码来实现这个功能。当它被RESTful访问时,得到405错误,但是!我开始成功使用Junit测试 !!!,我不知道为什么,希望得到解答
原始代码
public class GetResource {
private final static String BOOTPATH = "resource/";
public static DocResource getDoc(String reporturl,String sign){
....
String urlStr = reporturl+sign;
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(false);
conn.setRequestMethod("GET");
//设置超时间为3秒
conn.setConnectTimeout(3*1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3373.400 QQBrowser/9.6.11864.400");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.connect();
//得到输入流
InputStream inputStream = conn.getInputStream();
....
}
/**
* 从输入流中获取字节数组
* @param inputStream
* @return
* @throws IOException
*/
private static byte[] readInputStream(InputStream inputStream) throws IOException {
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
return bos.toByteArray();
}
}
错误
java.io.IOException: Server returned HTTP response code: 405 for URL: http://pitanco-10042983.cossh.myqcloud.com/pitanco00002/2017/10/28/<phone>/112909.doc?sign=<base64sign>
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1840)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441)...
的junit
@Test
public void m() {
try{
GetResource.getDoc("http://pitanco-10042983.cossh.myqcloud.com/pitanco00002/2017/10/28/<phone>/112909.doc",
"?sign=<sign>");
}catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}
ps.environment
java 1.8.0_77; spring 4.3.6; spring mvc 4.3.6; junit 4:tomcat8.5
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
春季代码
URI uri = new URI(urlStr);
SimpleClientHttpRequestFactory schr = new SimpleClientHttpRequestFactory();
ClientHttpRequest chr = schr.createRequest(uri, HttpMethod.GET);
//chr.getBody().write(param.getBytes());//body中设置请求参数
ClientHttpResponse res = chr.execute();
InputStream inputStream = res.getBody(); //获得返回数据
//获取自己数组
byte[] getData = readInputStream(inputStream);