无论是使用HttpGet,还是使用HttpPost,都必须通过如下3步来访问HTTP资源。
1.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。
2.使用DefaultHttpClient类的execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。
3.通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。
如果使用HttpPost方法提交HTTP POST请求,则需要使用HttpPost类的setEntity方法设置请求参数。参数则必须用NameValuePair[]数组存储。
HttpGet
[java] view plain copy
- public String doGet()
- {
- String uriAPI = "http://XXXXX?str=I+am+get+String";
- String result= "";
- // HttpGet httpRequst = new HttpGet(URI uri);
- // HttpGet httpRequst = new HttpGet(String uri);
- // 创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。
- HttpGet httpRequst = new HttpGet(uriAPI);
- // new DefaultHttpClient().execute(HttpUriRequst requst);
- try {
- //使用DefaultHttpClient类的execute方法发送HTTP GET请求,并返回HttpResponse对象。
- HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst);//其中HttpGet是HttpUriRequst的子类
- if(httpResponse.getStatusLine().getStatusCode() == 200)
- {
- HttpEntity httpEntity = httpResponse.getEntity();
- result = EntityUtils.toString(httpEntity);//取出应答字符串
- // 一般来说都要删除多余的字符
- result.replaceAll("\r", "");//去掉返回结果中的"\r"字符,否则会在结果字符串后面显示一个小方格
- }
- else
- httpRequst.abort();
- } catch (ClientProtocolException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- result = e.getMessage().toString();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- result = e.getMessage().toString();
- }
- return result;
- }
HttpPost
如果使用HttpPost方法提交HTTP POST请求,则需要使用HttpPost类的setEntity方法设置请求参数。参数则必须用NameValuePair[]数组存储。
[java] view plain copy
- public String doPost()
- {
- String uriAPI = "http://XXXXXX";//Post方式没有参数在这里
- String result = "";
- HttpPost httpRequst = new HttpPost(uriAPI);//创建HttpPost对象
- List <NameValuePair> params = new ArrayList<NameValuePair>();
- params.add(new BasicNameValuePair("str", "I am Post String"));
- try {
- httpRequst.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
- HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst);
- if(httpResponse.getStatusLine().getStatusCode() == 200)
- {
- HttpEntity httpEntity = httpResponse.getEntity();
- result = EntityUtils.toString(httpEntity);//取出应答字符串
- }
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- result = e.getMessage().toString();
- }
- catch (ClientProtocolException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- result = e.getMessage().toString();
- }
- catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- result = e.getMessage().toString();
- }
- return result;
- }
以发送连接请求时,需要设置链接超时和请求超时等参数,否则会长期停止或者崩溃。
钉钉消息推送:
public static void sendDingTalkRisk(Integer sbszid,Long bbh) throws IOException {
HttpClient httpClient= HttpClients.createDefault();
HttpPost httpPost=new HttpPost(dingTalkPath);
httpPost.addHeader("Content-Type", "application/json; charset=utf-8");
JSONObject bodys = new JSONObject();
bodys.put("msgtype","text");
JSONObject text=new JSONObject();
String sendMessage = "";
sendMessage ="申报税种id:"+sbszid+",版本号:"+bbh+"上传失败啦,请注意查看";
text.put("content",sendMessage);
bodys.put("text",text);
JSONObject at=new JSONObject();
at.put("isAtAll",true);
bodys.put("at",at);
StringEntity se = new StringEntity(bodys.toJSONString(), "utf-8");
httpPost.setEntity(se);
httpClient.execute(httpPost);
}
restTemplate post请求:
RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); MultiValueMap<String, String> map= new LinkedMultiValueMap<>(); map.add("interfaceName", req.getInterfaceName()); map.add("url", req.getUrl()); map.add("method", "post"); map.add("operation_id", req.getOperation_id()); ResponseEntity<String> response = restTemplate.postForEntity( url, map , String.class );