| package com.doumee.core.utils; | 
|   | 
| import com.alibaba.fastjson.JSONObject; | 
| import org.apache.commons.codec.binary.Hex; | 
| //import org.apache.commons.httpclient.HttpClient; | 
| //import org.apache.commons.httpclient.NameValuePair; | 
| //import org.apache.commons.httpclient.methods.PostMethod; | 
| //import org.apache.commons.httpclient.params.HttpMethodParams; | 
| import org.apache.http.HttpEntity; | 
| import org.apache.http.HttpResponse; | 
| import org.apache.http.HttpStatus; | 
| import org.apache.http.client.methods.HttpPost; | 
| import org.apache.http.entity.StringEntity; | 
| import org.apache.http.impl.client.*; | 
| import org.apache.http.util.EntityUtils; | 
|   | 
| import java.io.*; | 
| import java.lang.reflect.Field; | 
| import java.net.HttpURLConnection; | 
| import java.net.URL; | 
| import java.net.URLConnection; | 
| import java.security.MessageDigest; | 
| import java.security.NoSuchAlgorithmException; | 
| import java.util.HashMap; | 
| import java.util.Map; | 
| import java.util.UUID; | 
|   | 
| public class HttpUtil { | 
|     public static final String UTF8 = "UTF-8"; | 
|   | 
|     /** | 
|      * @param urlpath | 
|      * @throws IOException | 
|      * @throws UnsupportedEncodingException | 
|      */ | 
|     public static String postRequestConn(String urlpath) throws UnsupportedEncodingException, IOException { | 
|         String sendString = ""; | 
|   | 
|         // 创建url对象 | 
|         URL url = new URL(urlpath); | 
|   | 
|         // 打开url连接 | 
|         HttpURLConnection connection = (HttpURLConnection) url.openConnection(); | 
|         connection.setRequestProperty("Content-Type", "application/octet-stream"); | 
|         // 设置url请求方式 ‘get’ 或者 ‘post’ | 
|         connection.setRequestMethod("POST"); | 
|         connection.setDoOutput(true); | 
|         connection.setDoInput(true); | 
|         connection.setUseCaches(true); | 
|         connection.setConnectTimeout(3000); | 
|         connection.setReadTimeout(10000); | 
|         connection.setRequestProperty("Charset", "UTF-8"); | 
|         int responseCode = connection.getResponseCode(); | 
|         if (HttpURLConnection.HTTP_OK == responseCode) { | 
|             String readLine; | 
|             BufferedReader responseReader; | 
|             StringBuffer sb = new StringBuffer(); | 
|             responseReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); | 
|             while ((readLine = responseReader.readLine()) != null) { | 
|                 sb.append(readLine).append("\n"); | 
|             } | 
|             responseReader.close(); | 
|             sendString = sb.toString(); | 
|             // httpConn.disconnect(); | 
|         } else { | 
|             System.out.println("error"); | 
|         } | 
|   | 
|         return sendString; | 
|     } | 
|   | 
|     /** | 
|      * @param urlPath | 
|      * @param json | 
|      * @throws IOException | 
|      * @throws UnsupportedEncodingException | 
|      */ | 
|     public static String postRequestConn(String urlPath, String json,String tokenStr) throws UnsupportedEncodingException, IOException { | 
|         String sendString = ""; | 
|         // try { | 
|         URL url; | 
|         url = new URL(urlPath); | 
|         HttpURLConnection httpConn; | 
|         httpConn = (HttpURLConnection) url.openConnection(); | 
|         // httpConn.connect(); | 
|         httpConn.setDoOutput(true); | 
|         httpConn.setDoInput(true); | 
|         httpConn.setRequestMethod("POST"); | 
|         httpConn.setUseCaches(false); | 
|         httpConn.setInstanceFollowRedirects(true); | 
|         httpConn.setRequestProperty("Content-Type", "application/json"); | 
|         httpConn.setRequestProperty("accept", "application/json"); | 
|         httpConn.setRequestProperty("X-Judge-Server-Token",getSHA256Str(tokenStr)); | 
|         httpConn.setConnectTimeout(10000); | 
|         httpConn.setReadTimeout(10000); | 
|         httpConn.connect(); | 
|         OutputStream out = httpConn.getOutputStream(); | 
|         byte[] data = (json.toString()).getBytes("UTF-8"); | 
|         out.write(data, 0, data.length); | 
|         out.flush(); | 
|         out.close(); | 
|         int responseCode = httpConn.getResponseCode(); | 
|         if (HttpURLConnection.HTTP_OK == responseCode) { | 
|             String readLine; | 
|             BufferedReader responseReader; | 
|             StringBuffer sb = new StringBuffer(); | 
|             responseReader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8")); | 
|             while ((readLine = responseReader.readLine()) != null) { | 
|                 sb.append(readLine); | 
|             } | 
|             responseReader.close(); | 
|             sendString = sb.toString(); | 
|             // httpConn.disconnect(); | 
|         } else { | 
|             System.out.println("error"); | 
|         } | 
|         return sendString; | 
|     } | 
|   | 
|     public static String doPost(String url,JSONObject json,String token) { | 
|         DefaultHttpClient client = new DefaultHttpClient(); | 
|         HttpPost post = new HttpPost(url); | 
|         String response = null; | 
|         try { | 
|             post.addHeader("Content-Type", "application/json; charset=utf-8"); | 
|             post.addHeader("X-Judge-Server-Token",getSHA256Str(token)); | 
|             StringEntity s = new StringEntity(json.toString()); | 
|             s.setContentEncoding("UTF-8"); | 
|             s.setContentType("application/json");//发送json数据需要设置contentType | 
|             post.setEntity(s); | 
|             HttpResponse res = client.execute(post); | 
|             if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { | 
|                 HttpEntity entity = res.getEntity(); | 
|                 response = EntityUtils.toString(entity);// 返回json格式: | 
|             } | 
|         } catch (Exception e) { | 
|             throw new RuntimeException(e); | 
|         } | 
|         // System.out.print(response); | 
|         return response; | 
|     } | 
|   | 
|     //java对象转map | 
|     public static Map<String, Object> objectToMap(Object obj) throws Exception { | 
|         if (obj == null) { | 
|             return null; | 
|         } | 
|         Map<String, Object> map = new HashMap<>(); | 
|         Field[] declaredFields = obj.getClass().getDeclaredFields(); | 
|         for (Field field : declaredFields) { | 
|             field.setAccessible(true); | 
|             map.put(field.getName(), field.get(obj)); | 
|         } | 
|         return map; | 
|     } | 
| //    public static String doFormPost(String url,JSONObject json) throws Exception{ | 
| //        String response = null; | 
| //        HttpClient client = new HttpClient(); | 
| //        PostMethod postMethod = new PostMethod(url); | 
| //        postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"utf-8"); | 
| //        Map<String, Object>  params =objectToMap(json); | 
| //        if(params !=null && params.get("map") !=null ){ | 
| //            HashMap<String,String> map = (HashMap<String, String>) params.get("map"); | 
| //            if(map !=null   && !map.isEmpty()){ | 
| //            NameValuePair[] data = new NameValuePair[map.size()]; | 
| //            int i =0; | 
| //            for(Map.Entry<String,String> entry : map.entrySet()){ | 
| //                data[i] = new NameValuePair(entry.getKey(),entry.getValue()); | 
| //                i++; | 
| //            } | 
| //            postMethod.setRequestBody(data); | 
| //            } | 
| //        } | 
| //        try { | 
| //            client.executeMethod(postMethod); | 
| //            if(postMethod.getStatusCode() == HttpStatus.SC_OK){ | 
| //                response = postMethod.getResponseBodyAsString(); | 
| //            } | 
| //        }catch (Exception e){ | 
| //            e.printStackTrace(); | 
| //        } | 
| //        return response; | 
| //    } | 
|   | 
|   | 
|     public static void main(String[] args) throws IOException { | 
| //        "language_config": sub_config["config"], | 
| //                "src": code, | 
| //                "max_cpu_time": self.problem.time_limit, | 
| //                "max_memory": 1024 * 1024 * self.problem.memory_limit, | 
| //                "test_case_id": self.problem.test_case_id, | 
| //                "output": False, | 
| //                "spj_version": self.problem.spj_version, | 
| //                "spj_config": spj_config.get("config"), | 
| //                "spj_compile_config": spj_config.get("compile"), | 
| //                "spj_src": self.problem.spj_code, | 
| //                "io_mode": self.problem.io_mode | 
| /* | 
|         { | 
|             "template": "" , | 
|   | 
|              "compile": { | 
|             "src_name": "main.cpp", | 
|                     "exe_name": "main", | 
|                     "max_cpu_time": 10000, | 
|                     "max_real_time": 20000, | 
|                     "max_memory": 1024 * 1024 * 1024, | 
|                     "compile_command": "/usr/bin/g++ -DONLINE_JUDGE -O2 -w -fmax-errors=3 -std=c++14 {src_path} -lm -o {exe_path}", | 
|         }, | 
|             "run": { | 
|             "command": "{exe_path}", | 
|                     "seccomp_rule": {ProblemIOMode.standard: "c_cpp", ProblemIOMode.file: "c_cpp_file_io"}, | 
|             "env": default_env | 
|         } | 
|   | 
|         {"config": _cpp_lang_config, "spj": {"compile": _cpp_lang_spj_compile, "config": _cpp_lang_spj_config}, | 
|             "name": "C++", "description": "G++ 5.4", "content_type": "text/x-c++src"},*/ | 
|         JSONObject json =new JSONObject(); | 
|         JSONObject j = new JSONObject(); | 
|         JSONObject spj = new JSONObject(); | 
|         JSONObject sc = new JSONObject(); | 
|         sc.put("src_name","spj-{spj_version}.cpp"); | 
|         sc.put("exe_name","spj-{spj_version}"); | 
|         sc.put("max_cpu_time",10000); | 
|         sc.put("max_real_time",20000); | 
|         sc.put("max_memory",1024 * 1024 * 1024); | 
|         sc.put("compile_command","/usr/bin/g++ -DONLINE_JUDGE -O2 -w -fmax-errors=3 -std=c++14 {src_path} -lm -o {exe_path}"); | 
|         spj.put("compile",sc); | 
|         JSONObject scc = new JSONObject(); | 
|         scc.put("exe_name","spj-{spj_version}"); | 
|         scc.put("command","{exe_path} {in_file_path} {user_out_file_path}"); | 
|         scc.put("seccomp_rule","c_cpp"); | 
|         spj.put("config",scc); | 
|         JSONObject compile = new JSONObject(); | 
|         compile.put("src_name", "main.cpp"); | 
|         compile.put("exe_name", "main"); | 
|         compile.put("max_cpu_time", 10000); | 
|         compile.put("max_real_time", 20000); | 
|         compile.put("max_memory",1024 * 1024 * 1024); | 
|         compile.put("compile_command", "/usr/bin/g++ -DONLINE_JUDGE -O2 -w -fmax-errors=3 -std=c++14 {src_path} -lm -o {exe_path}"); | 
|         JSONObject run = new JSONObject(); | 
|         JSONObject sr = new JSONObject(); | 
|         sr.put("Standard IO","c_cpp"); | 
|         sr.put("File IO","c_cpp_file_io"); | 
|         run.put("command", "{exe_path}"); | 
|         run.put("seccomp_rule", sr); | 
|         run.put("env",new  String[]{"LANG=en_US.UTF-8", "LANGUAGE=en_US:en", "LC_ALL=en_US.UTF-8"}); | 
|         JSONObject config = new JSONObject(); | 
|         config.put("template","//PREPEND BEGIN\n" + | 
|                 "#include <iostream>\n" + | 
|                 "//PREPEND END\n" + | 
|                 "\n" + | 
|                 "//TEMPLATE BEGIN\n" + | 
|                 "int add(int a, int b) {\n" + | 
|                 "  // Please fill this blank\n" + | 
|                 "  return ___________;\n" + | 
|                 "}\n" + | 
|                 "//TEMPLATE END\n" + | 
|                 "\n" + | 
|                 "//APPEND BEGIN\n" + | 
|                 "int main() {\n" + | 
|                 "  std::cout << add(1, 2);\n" + | 
|                 "  return 0;\n" + | 
|                 "}\n" + | 
|                 "//APPEND END"); | 
|         config.put("run",run); | 
|         config.put("compile",compile); | 
|   | 
|         j.put("name","C++"); | 
|         j.put("description","G++ 5.4"); | 
|         j.put("content_type","text/x-c++src"); | 
|         j.put("config",config); | 
|         j.put("spj",spj); | 
|   | 
|         json.put("language_config",j.get("config")); | 
|         json.put("src","#include <stdio.h> // puts     \n" + | 
|                 "int main(){\n" + | 
|                 "  puts(\"Hello,World!\");// 输出\n" + | 
|                 "}"); | 
|         json.put("max_cpu_time",1000); | 
|         json.put("max_memory",1024*1024*64); | 
|         json.put("test_case_id","2b7e2f6a801b6c00388e717ae11b6f57"); | 
| //        json.put("output",Boolean.FALSE); | 
| //        json.put("spj_version",""); | 
| //        json.put("spj_config",""); | 
| //        json.put("spj_compile_config",""); | 
| //        json.put("spj_src",""); | 
| //        json.put("io_mode","{\"input\": \"input.in\", \"output\": \"output.out\", \"io_mode\": \"Standard IO\"}"); | 
|   | 
|         System.out.println(json.toJSONString()); | 
|         System.out.println(postRequestConn("http://47.100.55.21:8080/judge",json.toJSONString(),"3c8e8bd79d66259c46d8a3d057278dc8")); | 
|     } | 
|   | 
|     public static String getSHA256Str(String str) { | 
|         MessageDigest messageDigest; | 
|         String encdeStr = ""; | 
|         try { | 
|             messageDigest = MessageDigest.getInstance("SHA-256"); | 
|             byte[] hash = messageDigest.digest(str.getBytes("UTF-8")); | 
|             encdeStr = Hex.encodeHexString(hash); | 
|         } catch (NoSuchAlgorithmException e) { | 
|             e.printStackTrace(); | 
|         } catch (UnsupportedEncodingException e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return encdeStr; | 
|     } | 
|   | 
|   | 
|   | 
|     /** | 
|      * 下载二维码图片文件, | 
|      *  | 
|      * @param urlString | 
|      * @return 临时文件夹地址 | 
|      * @throws Exception | 
|      */ | 
|   | 
|     public static String downloadQrcode(String urlString) throws Exception { | 
|         String savePath = System.getProperty("java.io.tmpdir"); | 
|         String nfix = ".jpg";// 文件后缀名 | 
|         String tempName = UUID.randomUUID().toString() + nfix;// 临时文件名 | 
|   | 
|         // ----------------图片下载开始--------------- | 
|         // 构造URL | 
|         URL url = new URL(urlString); | 
|         // 打开连接 | 
|         URLConnection con = url.openConnection(); | 
|         // 设置请求超时为5s | 
|         con.setConnectTimeout(5 * 1000); | 
|         // 输入流 | 
|         InputStream is = con.getInputStream(); | 
|   | 
|         // 1K的数据缓冲 | 
|         byte[] bs = new byte[1024]; | 
|         // 读取到的数据长度 | 
|         int len; | 
|         // 输出的文件流 | 
|         File sf = new File(savePath); | 
|         if (!sf.exists()) { | 
|             sf.mkdirs(); | 
|         } | 
|         String tempFilePath = sf.getPath() + "\\" + tempName; | 
|         OutputStream os = new FileOutputStream(tempFilePath); | 
|         // 开始读取 | 
|         while ((len = is.read(bs)) != -1) { | 
|             os.write(bs, 0, len); | 
|         } | 
|         // 完毕,关闭所有链接 | 
|         os.close(); | 
|         is.close(); | 
|         // -------------------图片下载完毕------------------ | 
|   | 
|         return tempFilePath; | 
|     } | 
| } |