服务器返回HTTP响应代码:405传递URL和junit

时间:2017-10-30 04:24:07

标签: java tomcat junit4 httpurlconnection

  

这个函数是由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);

0 个答案:

没有答案