如何在HttpURLConnection中发送PUT,DELETE HTTP请求?
问题描述:
我想知道是否可以通过java.net.HttpURLConnection
发送PUT,DELETE请求(实际上)到基于HTTP的URL。如何在HttpURLConnection中发送PUT,DELETE HTTP请求?
我已经阅读了很多文章描述如何发送GET,POST,TRACE,OPTIONS请求,但是我仍然没有找到任何成功执行PUT和DELETE请求的示例代码。
答
我会推荐Apache HTTPClient。
答
要执行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();
答
这是如何活像ked对我来说:
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("DELETE");
int responseCode = connection.getResponseCode();
答
UrlConnection是一个尴尬的API工作。 HttpClient是目前为止最好的API,它可以让你免除时间寻找如何完成某些东西,比如这个stackoverflow问题。我在几个REST客户端中使用jdk HttpUrlConnection后写这个。 此外,当涉及到可伸缩性功能(如线程池,连接池等)时,HttpClient更优越
答
我同意@adietisheim和其他人的建议HttpClient。
我花了很多时间尝试使用HttpURLConnection进行一个简单的调用来休息服务,它并没有让我相信我,之后我尝试了使用HttpClient,它确实更容易,更易于理解和更好。
的代码示例,使认沽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);
在你的代码
答
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
}
答
对于做正确的HTML看跌期权,你会必须用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();
}
答
甚至可以选择其他模板:
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();
您能告诉我们您尝试使用的代码吗? – akarnokd 2009-06-26 20:07:54