首页 文章

如何在HttpURLConnection中发送PUT,DELETE HTTP请求?

提问于
浏览
117

我想知道是否可以通过 java.net.HttpURLConnection 发送PUT,DELETE请求(实际上)到基于HTTP的URL .

我已经阅读了很多文章,描述了如何发送GET,POST,TRACE,OPTIONS请求,但我仍然没有找到任何成功执行PUT和DELETE请求的示例代码 .

9 回答

  • 8

    要执行HTTP PUT:

    URL url = new URL("http://www.example.com/resource");
    HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
    httpCon.setDoOutput(true);
    httpCon.setRequestMethod("PUT");
    OutputStreamWriter out = new OutputStreamWriter(
        httpCon.getOutputStream());
    out.write("Resource content");
    out.close();
    httpCon.getInputStream();
    

    要执行HTTP DELETE:

    URL url = new URL("http://www.example.com/resource");
    HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
    httpCon.setDoOutput(true);
    httpCon.setRequestProperty(
        "Content-Type", "application/x-www-form-urlencoded" );
    httpCon.setRequestMethod("DELETE");
    httpCon.connect();
    
  • 0

    这是它对我有用的方式:

    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("DELETE");
    int responseCode = connection.getResponseCode();
    
  • 3
    public  HttpURLConnection getHttpConnection(String url, String type){
            URL uri = null;
            HttpURLConnection con = null;
            try{
                uri = new URL(url);
                con = (HttpURLConnection) uri.openConnection();
                con.setRequestMethod(type); //type: POST, PUT, DELETE, GET
                con.setDoOutput(true);
                con.setDoInput(true);
                con.setConnectTimeout(60000); //60 secs
                con.setReadTimeout(60000); //60 secs
                con.setRequestProperty("Accept-Encoding", "Your Encoding");
                con.setRequestProperty("Content-Type", "Your Encoding");
            }catch(Exception e){
                logger.info( "connection i/o failed" );
            }
            return con;
    }
    

    然后在你的代码中:

    public void yourmethod(String url, String type, String reqbody){
        HttpURLConnection con = null;
        String result = null;
        try {
            con = conUtil.getHttpConnection( url , type);
        //you can add any request body here if you want to post
             if( reqbody != null){  
                    con.setDoInput(true);
                    con.setDoOutput(true);
                    DataOutputStream out = new  DataOutputStream(con.getOutputStream());
                    out.writeBytes(reqbody);
                    out.flush();
                    out.close();
                }
            con.connect();
            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String temp = null;
            StringBuilder sb = new StringBuilder();
            while((temp = in.readLine()) != null){
                sb.append(temp).append(" ");
            }
            result = sb.toString();
            in.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    //result is the response you get from the remote side
    }
    
  • 0

    我同意@adietisheim和其他建议HttpClient的人 .

    我花了很多时间尝试使用HttpURLConnection进行简单的休息服务,并且它没有说服我,之后我尝试使用HttpClient,它真的更容易,可以理解和更好 .

    进行put http调用的代码示例如下:

    DefaultHttpClient httpClient = new DefaultHttpClient();
    
    HttpPut putRequest = new HttpPut(URI);
    
    StringEntity input = new StringEntity(XML);
    input.setContentType(CONTENT_TYPE);
    
    putRequest.setEntity(input);
    HttpResponse response = httpClient.execute(putRequest);
    
  • 9

    UrlConnection是一个难以使用的API . HttpClient是迄今为止更好的API,它将使您免于浪费时间搜索如何实现某些事情,例如stackoverflow问题完全说明 . 我在几个REST客户端中使用了jdk HttpUrlConnection之后编写了这个 . 此外,当谈到可伸缩性功能(如线程池,连接池等)时,HttpClient非常出色

  • 3

    要正确执行HTML中的PUT,您必须使用try / catch包围它:

    try {
        url = new URL("http://www.example.com/resource");
        HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
        httpCon.setDoOutput(true);
        httpCon.setRequestMethod("PUT");
        OutputStreamWriter out = new OutputStreamWriter(
            httpCon.getOutputStream());
        out.write("Resource content");
        out.close();
        httpCon.getInputStream();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  • 20

    我会推荐Apache HTTPClient .

  • 0

    即使是休息模板也可以选择:

    String payload = "<?xml version=\"1.0\" encoding=\"UTF-8\"?<CourierServiceabilityRequest>....";
        RestTemplate rest = new RestTemplate();
    
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/xml");
        headers.add("Accept", "*/*");
        HttpEntity<String> requestEntity = new HttpEntity<String>(payload, headers);
        ResponseEntity<String> responseEntity =
                rest.exchange(url, HttpMethod.PUT, requestEntity, String.class);
    
         responseEntity.getBody().toString();
    
  • 160

    有一个简单的删除和放置请求的方法,你可以通过添加“ _method " parameter to your post request and write " PUT " or " DELETE ”来实现它的 Value !

相关问题