精华内容
下载资源
问答
  • import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util...

    最近在写证照识别业务(分析上传图片类型->调用该类型对应识别接口),其中第一步分析类型用的是TensorFlow训练出来的模型,接着用java调用其生成的pb文件进行识别类型;接着进行证照识别的接口是在调研后选择了face++的,因为可支持自定义模板。等我有空的时候,会把全部业务流程整理出来,这里先把调用外部接口的方法写了出来。

    示例代码:

    JSONObject jsonObject = InterfaceUtil.doPost(TEMPLATE_OCR_URL,
    				buildTextMap(), buildFileMap(file));
    				
       // 传入api_key、api_secret这两个参数,类型为字符串。
    	private Map<String, String> buildTextMap() {
    		Map<String, String> textMap = new HashMap<String, String>();
    		textMap.put("api_key", API_KEY);
    		textMap.put("api_secret", API_SECRET);
    		return textMap;
    	}
    
        // 传一个叫image_file的MultipartFile格式参数。
    	private Map<String, MultipartFile> buildFileMap(MultipartFile file) {
    		Map<String, MultipartFile> fileMap = new HashMap<String, MultipartFile>();
    		fileMap.put("image_file", file);
    		return fileMap;
    	}
    

    原工具类(返回状态码非200时会报错,优化后代码在下面):

    
    
    import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Iterator;
    import java.util.Map;
    
    import org.springframework.web.multipart.MultipartFile;
    
    import com.alibaba.rocketmq.shade.com.alibaba.fastjson.JSONObject;
    
    public class InterfaceUtil {
    	/**
    	 * 表单形式上传数据
    	 * 
    	 * @param urlStr  接口地址
    	 * @param textMap 字符串参数
    	 * @param fileMap 文件参数
    	 * @param contentType 没有传入文件类型默认采用application/octet-stream
    	 *                    contentType非空采用filename匹配默认的图片类型
    	 * @return 返回response数据
    	 */
    	@SuppressWarnings("rawtypes")
    	public static JSONObject doPost(String urlStr, Map<String, String> textMap,
    			Map<String, MultipartFile> fileMap) {
    		JSONObject jsonObject = null;
    		HttpURLConnection conn = null;
    		// boundary就是request头和上传文件内容的分隔符
    		String BOUNDARY = "---------------------------123821742118716";
    		try {
    			URL url = new URL(urlStr);
    			conn = (HttpURLConnection) url.openConnection();
    			conn.setConnectTimeout(5000);
    			conn.setReadTimeout(30000);
    			conn.setDoOutput(true);
    			conn.setDoInput(true);
    			conn.setUseCaches(false);
    			conn.setRequestMethod("POST");
    			conn.setRequestProperty("Connection", "Keep-Alive");
    			conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
    			conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
    			OutputStream out = new DataOutputStream(conn.getOutputStream());
    			// text
    			if (textMap != null) {
    				StringBuffer strBuf = new StringBuffer();
    				Iterator iter = textMap.entrySet().iterator();
    				while (iter.hasNext()) {
    					Map.Entry entry = (Map.Entry) iter.next();
    					String inputName = (String) entry.getKey();
    					String inputValue = (String) entry.getValue();
    					if (inputValue == null) {
    						continue;
    					}
    					strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");
    					strBuf.append("Content-Disposition:form-data;name=\"" + inputName + "\"\r\n\r\n");
    					strBuf.append(inputValue);
    				}
    				out.write(strBuf.toString().getBytes());
    			}
    			// file
    			if (fileMap != null) {
    				Iterator iter = fileMap.entrySet().iterator();
    				while (iter.hasNext()) {
    					Map.Entry entry = (Map.Entry) iter.next();
    					String inputName = (String) entry.getKey();
    					MultipartFile inputValue = (MultipartFile) entry.getValue();
    					if (inputValue == null) {
    						continue;
    					}
    					String filename = inputValue.getOriginalFilename();
    
    					// 没有传入文件类型,同时根据文件获取不到类型,默认采用application/octet-stream
    					String contentType = inputValue.getContentType();
    
    					StringBuffer strBuf = new StringBuffer();
    					strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");
    					strBuf.append("Content-Disposition:form-data;name=\"" + inputName + "\";filename=\"" + filename
    							+ "\"\r\n");
    					strBuf.append("Content-Type:" + contentType + "\r\n\r\n");
    					out.write(strBuf.toString().getBytes());
    					InputStream in = inputValue.getInputStream();
    					int bytes = 0;
    					byte[] bufferOut = new byte[1024];
    					while ((bytes = in.read(bufferOut)) != -1) {
    						out.write(bufferOut, 0, bytes);
    					}
    					in.close();
    				}
    			}
    			byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
    			out.write(endData);
    			out.flush();
    			out.close();
    			// 读取返回数据
    
    			ByteArrayOutputStream bStream = new ByteArrayOutputStream();
    			byte[] buffer = new byte[1024];
    			int len = -1;
    			while ((len = conn.getInputStream().read(buffer)) != -1) {
    				bStream.write(buffer, 0, len);
    			}
    			jsonObject = JSONObject.parseObject(new String(bStream.toByteArray(), "UTF-8"));
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			if (conn != null) {
    				conn.disconnect();
    				conn = null;
    			}
    		}
    		return jsonObject;
    	}
    
    }
    
    

    --------------后续补充2020年11月20日 10:07:08--------------
    调试时发现,当返回的状态码不等于200时,会报错,猜测是获取流的方式有些不一样,又找到一篇文章,果然是这样,解决方案:报错时通过 getErrorStream获取错误信息,文章链接httpurlconnection post请求获取返回码为400的异常信息


    优化后工具类:

    import java.io.BufferedReader;
    import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Iterator;
    import java.util.Map;
    
    import org.springframework.web.multipart.MultipartFile;
    
    import com.alibaba.rocketmq.shade.com.alibaba.fastjson.JSONObject;
    
    public class InterfaceUtil {
    	/**
    	 * 表单形式上传数据
    	 * 
    	 * @param urlStr
    	 * @param textMap
    	 * @param fileMap
    	 * @param contentType 没有传入文件类型默认采用application/octet-stream
    	 *                    contentType非空采用filename匹配默认的图片类型
    	 * @return 返回response数据
    	 */
    	@SuppressWarnings("rawtypes")
    	public static JSONObject doPost(String urlStr, Map<String, String> textMap, Map<String, MultipartFile> fileMap) {
    		JSONObject jsonObject = null;
    		HttpURLConnection conn = null;
    		// boundary就是request头和上传文件内容的分隔符
    		String BOUNDARY = "---------------------------123821742118716";
    		try {
    			URL url = new URL(urlStr);
    			conn = (HttpURLConnection) url.openConnection();
    			conn.setConnectTimeout(5000);
    			conn.setReadTimeout(30000);
    			conn.setDoOutput(true);
    			conn.setDoInput(true);
    			conn.setUseCaches(false);
    			conn.setRequestMethod("POST");
    			conn.setRequestProperty("Connection", "Keep-Alive");
    			conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
    			conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
    			OutputStream out = new DataOutputStream(conn.getOutputStream());
    			// text
    			if (textMap != null) {
    				StringBuffer strBuf = new StringBuffer();
    				Iterator iter = textMap.entrySet().iterator();
    				while (iter.hasNext()) {
    					Map.Entry entry = (Map.Entry) iter.next();
    					String inputName = (String) entry.getKey();
    					String inputValue = (String) entry.getValue();
    					if (inputValue == null) {
    						continue;
    					}
    					strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");
    					strBuf.append("Content-Disposition:form-data;name=\"" + inputName + "\"\r\n\r\n");
    					strBuf.append(inputValue);
    				}
    				out.write(strBuf.toString().getBytes());
    			}
    			// file
    			if (fileMap != null) {
    				Iterator iter = fileMap.entrySet().iterator();
    				while (iter.hasNext()) {
    					Map.Entry entry = (Map.Entry) iter.next();
    					String inputName = (String) entry.getKey();
    					MultipartFile inputValue = (MultipartFile) entry.getValue();
    					if (inputValue == null) {
    						continue;
    					}
    					String filename = inputValue.getOriginalFilename();
    
    					// 没有传入文件类型,同时根据文件获取不到类型,默认采用application/octet-stream
    					String contentType = inputValue.getContentType();
    
    					StringBuffer strBuf = new StringBuffer();
    					strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");
    					strBuf.append("Content-Disposition:form-data;name=\"" + inputName + "\";filename=\"" + filename
    							+ "\"\r\n");
    					strBuf.append("Content-Type:" + contentType + "\r\n\r\n");
    					out.write(strBuf.toString().getBytes());
    					InputStream in = inputValue.getInputStream();
    					int bytes = 0;
    					byte[] bufferOut = new byte[1024];
    					while ((bytes = in.read(bufferOut)) != -1) {
    						out.write(bufferOut, 0, bytes);
    					}
    					in.close();
    				}
    			}
    			byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
    			out.write(endData);
    			out.flush();
    			out.close();
    
    			InputStream inputStream = null;
    			if (conn.getResponseCode() != HttpURLConnection.HTTP_OK ) {
    				inputStream = conn.getErrorStream();//主要就是这里
    			} else {
    				inputStream = conn.getInputStream();//主要就是这里
    			}
    			BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
    			StringBuffer buffer = new StringBuffer();
    			String line = "";
    			while ((line = br.readLine()) != null) {
    				buffer.append(line);
    			}
    			String result = new String(buffer);
    			jsonObject = JSONObject.parseObject(result);
    			inputStream.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			if (conn != null) {
    				conn.disconnect();
    				conn = null;
    			}
    		}
    		return jsonObject;
    	}
    
    }
    
    
    展开全文
  • 最近在开发一个项目,需要将对象转成json,然后调用外部接口上报数据。 外部接口返回json数据 { "id": "xxx", // 上报成功时id才有数据 "code": "xxx", // 0代表上报成功,其他代表错误 "message": "xxx" // ...

    最近在开发一个项目,需要将对象转成json,然后调用外部接口上报数据。

    外部接口返回json数据

    {
        "id": "xxx", // 上报成功时id才有数据
        "code": "xxx", // 0代表上报成功,其他代表错误
        "message": "xxx" // 无论如何都有数据
    }
    

    java实现

    private void doUpload() {
    		HttpClient client = HttpClients.createDefault();
    		String url = SERVER_URL;// 外部接口地址
    		HttpPost post = new HttpPost(url);
    		JSONObject response = null;
    		try {
    			//buildSamDto(sampleDTO)方法为给实体对象sampleDTO属性赋值,
    			//接着用JSONObject.fromObject()方法将该sampleDTO对象转成json
    			StringEntity s = new StringEntity(JSONObject.fromObject(buildSamDto(sampleDTO)).toString());
    			s.setContentEncoding("UTF-8");
    			s.setContentType("application/json");
    			post.setEntity(s);
    			post.addHeader("content-type", "text/xml");
    			HttpResponse res = client.execute(post);// 上报数据
    			if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
               // String result = EntityUtils.toString(res.getEntity(), "utf-8"); 这个方法只能用一次,
               //不然会Attempted read from closed stream,故而改用下面的方法。
               //具体可查看我这篇博客'https://blog.csdn.net/qq_39380155/article/details/109576795'
    				byte[] byteArray = EntityUtils.toByteArray(res.getEntity());
    				response = JSONObject.fromObject(new String(byteArray, "utf-8"));// 防止返回结果中文乱码
    				String message = (String) response.get("message");
    				code = (String) response.get("id");
    
    				// 0代表上报成功
    				if ("0".equals((String) response.get("code"))) {
    					// TODO
    				} else {
    					// TODO
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    

    如果需要传入文件参数,可看我这篇文章
    如何用java实现post请求外部接口(字符串+文件参数)

    展开全文
  • Java调用外部接口

    千次阅读 2018-10-19 20:13:03
    进行java的C/S软件开发时,对接了一些第三方提供的网页接口。  使用接口的方式没有想象的那么难。  比方说提供的接口是一个GET形式时,在网页上直接输出地址,将参数拼凑输入即可得到返回值。  如果是一个POST...

    进行java的C/S软件开发时,对接了一些第三方提供的网页接口。 

    使用接口的方式没有想象的那么难。 
    比方说提供的接口是一个GET形式时,在网页上直接输出地址,将参数拼凑输入即可得到返回值。 
    如果是一个POST接口,就需要使用如POSTMAN或浏览器自带插件等等方式来进行一个接口的请求。 
    转化成代码也是如此。 
    下面是一个简单的POST接口调用实例: 
    P:param参数可使用JSONObject.fromObject(对象)来传入

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    /**

     * @author : cjd

     * @description : post接口 返回结果字符串

     * @params : [url, param]

     * @param url 请求接口

     * @param param 需要的json字符串

     * @return :java.lang.String

     * @date : 17:31 2018/8/1

     */

    public static String sendPost(String url, String param) {

        OutputStreamWriter out = null;

        BufferedReader in = null;

        String result = "";        try {

            URL realUrl = new URL(url);

            HttpURLConnection conn = null;            // 打开和URL之间的连接

            conn = (HttpURLConnection) realUrl.openConnection();            // 发送POST请求必须设置如下两行

            conn.setDoOutput(true);

            conn.setDoInput(true);

            conn.setRequestMethod("POST");    // POST方法

     

            // 设置通用的请求属性

            conn.setRequestProperty("accept", "*/*");

            conn.setRequestProperty("connection", "Keep-Alive");

            conn.setRequestProperty("user-agent",                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");

            conn.connect();            // 获取URLConnection对象对应的输出流

            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");            // 发送请求参数

            out.write(param);            // flush输出流的缓冲

            out.flush();            // 定义BufferedReader输入流来读取URL的响应

            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            String line;            while ((line = in.readLine()) != null) {

                result += line;

            }

        } catch (Exception e) {

            System.out.println("发送 POST 请求出现异常!" + e);

            e.printStackTrace();

        }        //使用finally块来关闭输出流、输入流

        finally {            try {                if (out != null) {

                    out.close();

                }                if (in != null) {

                    in.close();

                }

            } catch (IOException ex) {

                ex.printStackTrace();

            }

        }        return result;

    }

    调用该方法后得到的是对应返回的json数据的字符串格式。 
    java是一个面向对象的语言,所以使用JSONObject/JsonArray 将json数据转化为实体类的对象,举个我使用的例子,因为那边返回的接口形式有点奇怪,所以我进行了多步处理如下:

    1

    2

    3

    4

    5

    6

    PrePickupMailRes resultBean = new PrePickupMailRes();

    JSONObject respJson = JSONObject.fromObject(JSONObject.fromObject(json).get("respJson"));

    JSONArray jsonArray = (JSONArray) respJson.get("prePickupRspDetailDTOList");

    JSONObject resultJson = (JSONObject) jsonArray.get(0);

    JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[]{"MM/dd/yyyy HH:mm:ss"}));

    resultBean = (PrePickupMailRes) JSONObject.toBean(resultJson, PrePickupMailRes.class);

    这样我们最后得到的就是一个实体对象。

    关于JSONObject/JSONArray的使用方法见: 
    https://blog.csdn.net/chijiandi/article/details/81011369

    进行java的C/S软件开发时,对接了一些第三方提供的网页接口。 
    使用接口的方式没有想象的那么难。 
    比方说提供的接口是一个GET形式时,在网页上直接输出地址,将参数拼凑输入即可得到返回值。 
    如果是一个POST接口,就需要使用如POSTMAN或浏览器自带插件等等方式来进行一个接口的请求。 
    转化成代码也是如此。 
    下面是一个简单的POST接口调用实例: 
    P:param参数可使用JSONObject.fromObject(对象)来传入

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    /**

     * @author : cjd

     * @description : post接口 返回结果字符串

     * @params : [url, param]

     * @param url 请求接口

     * @param param 需要的json字符串

     * @return :java.lang.String

     * @date : 17:31 2018/8/1

     */

    public static String sendPost(String url, String param) {

        OutputStreamWriter out = null;

        BufferedReader in = null;

        String result = "";        try {

            URL realUrl = new URL(url);

            HttpURLConnection conn = null;            // 打开和URL之间的连接

            conn = (HttpURLConnection) realUrl.openConnection();            // 发送POST请求必须设置如下两行

            conn.setDoOutput(true);

            conn.setDoInput(true);

            conn.setRequestMethod("POST");    // POST方法

     

            // 设置通用的请求属性

            conn.setRequestProperty("accept", "*/*");

            conn.setRequestProperty("connection", "Keep-Alive");

            conn.setRequestProperty("user-agent",                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");

            conn.connect();            // 获取URLConnection对象对应的输出流

            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");            // 发送请求参数

            out.write(param);            // flush输出流的缓冲

            out.flush();            // 定义BufferedReader输入流来读取URL的响应

            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            String line;            while ((line = in.readLine()) != null) {

                result += line;

            }

        } catch (Exception e) {

            System.out.println("发送 POST 请求出现异常!" + e);

            e.printStackTrace();

        }        //使用finally块来关闭输出流、输入流

        finally {            try {                if (out != null) {

                    out.close();

                }                if (in != null) {

                    in.close();

                }

            } catch (IOException ex) {

                ex.printStackTrace();

            }

        }        return result;

    }

    调用该方法后得到的是对应返回的json数据的字符串格式。 
    java是一个面向对象的语言,所以使用JSONObject/JsonArray 将json数据转化为实体类的对象,举个我使用的例子,因为那边返回的接口形式有点奇怪,所以我进行了多步处理如下:

    1

    2

    3

    4

    5

    6

    PrePickupMailRes resultBean = new PrePickupMailRes();

    JSONObject respJson = JSONObject.fromObject(JSONObject.fromObject(json).get("respJson"));

    JSONArray jsonArray = (JSONArray) respJson.get("prePickupRspDetailDTOList");

    JSONObject resultJson = (JSONObject) jsonArray.get(0);

    JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[]{"MM/dd/yyyy HH:mm:ss"}));

    resultBean = (PrePickupMailRes) JSONObject.toBean(resultJson, PrePickupMailRes.class);

    这样我们最后得到的就是一个实体对象。

     

     

    转载:http://www.php.cn/java-article-407549.html

    展开全文
  • java通过url调用接口

    2017-09-13 09:45:11
    java通过url调用外部接口,返回字符串,再讲字符串解析成json格式。包含源码和jar包,直接运行即可,带注释。
  • 介于保密的原因,外部接口就不公开了。我的需求是根据第三方提供的接口,查询数据。但是我的请求是包含了sql语句的。类似于下面这样的URL: http://X.X.X.X/tb/re?select * from table where name='zhangsan' ?...

    第一次做这种对接外部(第三方)接口的开发。记录一下:

    介于保密的原因,外部接口就不公开了。我的需求是根据第三方提供的接口,查询数据。但是我的请求是包含了sql语句的。类似于下面这样的URL:

    http://X.X.X.X/tb/re?select * from table where name='zhangsan'

    ?前面的是他们提供的接口。后面是我传的sql语句,当然还需要你的用户名密码或者token。根据这个需求python可能几行代码就能搞定了,但是我使用的java,这个时候就感受到了python的简洁。

    参考代码如下:

    说明:

    1.QUERYTB是我们的外部接口。

    2.sql是我们要写的sql语句。

    3.我没使用用户名密码登录,使用的是token所以换成token即可。

    4.使用GET请求

    package test;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.Base64;
    import java.util.List;
    import java.util.Map;
    import javax.swing.text.AbstractDocument.Content;
    import com.fasterxml.jackson.core.JsonParser;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    import java.io.IOException;
    
    public class T {
     static String QUERY_TB = "http://。。。。";//外部接口
     static String QUERY_SQL = "?sql=。。。。";
     static String para="&access_token=。。。。。。。";
     static String uid = "123321456";
    
     public static void main(String[] args) {
      try {
       String u="512571";
        JSONArray j=test1(u).getJSONArray("data");
        for (int i =0;i<j.size();i++)
        {
         JSONArray oo=	(JSONArray) j.get(i);
        String one= (String) oo.get(0);
        String two= (String) oo.get(1);
        String three= (String) oo.get(2);
         System.out.println("1"+one+"2"+two+"3"+three);
         break;
        }
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
    
    
    
     public static JSONObject test1(String UID) throws IOException {
       URL url = new URL(QUERY_TB + QUERY_SQL+UID+para);
       HttpURLConnection connection = (HttpURLConnection) url.openConnection();
       connection.setRequestMethod("GET"); // 设置请求方式
       connection.setConnectTimeout(15000);
       connection.connect();
       BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
       String line = null;
       StringBuilder result = new StringBuilder();
       while ((line = br.readLine()) != null) { // 读取数据
        result.append(line);
       }
       br.close();
       connection.disconnect();
       JSONObject jsondata = JSONObject.fromObject(result.toString());
       return jsondata;
     }
    

    这里面也遇到了很多的问题:

    1,就是我们发送请求的时候,不能像在写sql的时候来写sql语句,比如 select * from table,我们可以看到语句中出现了空格,在我们发送URL请求的时候是不能这么写的,如果这样写的话,就会报一个400的错误,400状态码就意味这服务器不能够了解我们的URL地址,也就是我们URL地址出现错误。有人可能就问,为什么我同样把相同的连接粘入到浏览器为什么能正常访问接口里的数据呢?究其原因是我们在使用浏览器访问我们的URL的时候,会自动帮我们把空格去掉,所以能正常访问。

    那我们怎么把连接放入到我们的URL请求里呢?我们按照正常的写法来写sql语句,但是在出现空格的地方我们使用20%来填补空格,然后再传进去就可以了,如果需要用到单引号,我们是使用27%来代替的,如果出现上面那个错误,最笨的方法就是把连接粘贴到浏览器,浏览器就自动给我们替补上对应的占位符来填补不同的字符。

    2,怎么取到里面的数据就参考代码吧,我这个还是有点困难的,因为返回的不是json数据,也简单做了一下处理。

    展开全文
  • Java访问网络外部接口,并获取数据

    千次阅读 2020-05-09 15:59:12
    直接贴代码 import org.apache.logging....import java.io.*; import java.net.URL; import java.net.URLConnection; public class HttpRequestUtil { /** 日志 */ private static Logger log = LogManager.get
  • java调用外部接口(含参数)

    千次阅读 2020-03-10 20:02:26
    场景:页面查询时调用外部接口(含参数),对获取的数据进行封装返回页面 url为外部接口,放入硬编码中;params为查询参数 HttpUtil为工具类,doPost方法: public static String doPost(String apiUrl, ...
  • java通过HTTP调用接口(Get请求和Post请求
  • JAVA WEB】使用HTTPS请求外部接口

    千次阅读 2017-02-25 15:36:02
    如何使用HTTPS请求外部接口
  • Java接口异步调用

    2020-08-26 00:11:43
    主要介绍了Java接口异步调用,下面我们来一起学习一下吧
  • //post带参接口 JSONObject json = new JSONObject();//json格式的参数 Map,Object> map = new HashMap(); map.put("param",param); map.put("param1",param1); map.put("param2",param2); json.put("appKey",...
  • JAVA 调用外部接口

    万次阅读 2020-08-04 08:57:25
    系统需要调用guo wai一个接口,由于调用的guowai接口,需要通过proxy请求 现在有3个方案 1.使用proxy进行http请求 2.直接使用guo wai服务器部署项目 3.使用HK服务器作为中介获取返回数据 1:问题,代理不稳定 2:...
  • 一、使用原生jdk带的 HttpURLConnection 访问参数通过io流,麻烦的不行,写了一大堆,参数传输稀烂。(折腾半天有人说用RestTemplate啊,真可谓书到用时方恨少) 二、Spring RestTemplate ...1、get请求 ...
  • 1.Get请求 可以封装成工具类,代码如下,我这里工具类名叫UrlTools,方法名叫getStringByUrl(List ...//get请求外部接口 public String getStringByUrl(List<String> urlList){ for (int i = 0; i < ur...
  • java 从程序内部调用外部url/接口

    千次阅读 2019-01-09 15:10:11
    本人微信 zf363133213 欢迎各位添加好友,共同探讨问题 第一种方法: public Object test(){ ...//http请求头 RestTemplate restTemplate = new RestTemplate(); headers.setContentType(MediaType.pa...
  • java后台请求接口超时的处理

    千次阅读 2019-10-16 16:45:06
    以上内容出自:https://www.cnblogs.com/hzjjames/p/java_timeout.html; 但是遇到一个idea自动提示的错误,如下图: 线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的...
  • * @Description: 向外部接口发送POST请求,返回的数据为单个数据 * @param url 请求的url * @param reqObj 请求参数对象 * @param valueType 返回值映射类型 * @param outSideInterfaceName 外部接口中文...
  • SpringCloud Feign HTTPS请求外部接口

    万次阅读 2019-05-29 16:43:08
    项目需要调用外部接口,外部资金方的接口安全性较高,有如下要求: 使用HTTPS调用, 对请求报文进行算法签名,签名后结果需要添加到请求parameter中 生成一个 32 位的随机字符串 nonce,将 各个请求参数连同 ...
  • Java后台实现调用外部接口

    千次阅读 2018-12-04 18:52:42
    Java调用外部接口的方法,最终返回接口return的信息 代码如下: public class demo{ private string line; String strURL = "这里是你要调用的接口地址"; URL url = new URL(strURL); ...
  • java form-data请求方式 请求接口

    千次阅读 2020-11-24 15:57:47
    java form-data请求方式 请求接口 参数示例 MultiValueMap<String, String> map= new LinkedMultiValueMap<>(); map.add("apikey", kakao_api_push_api_key); map.add("userid",kakao_api_push_userId...
  • oracle insert数据成功之后调用触发器,触发器调用存储过程,存储实时调用java http
  • 代码调用外部HTTP请求接口

    千次阅读 2019-03-13 15:52:03
    转载链接样例:https://www.cnblogs.com/guxiong/p/6661272.html https://zhidao.baidu.com/question/627561819246516844.html package ... import java.io.IOException; import java.io.Unsuppor...
  • 做了一个接口,查询mongdb的,然后根据日志分析发现有个别请求非常慢,甚至主键查询都要几分钟了,通过生产实测,了解 到当时其实据库压力并不大,而且相同的条件直接用sql跑还是1秒左右返回的,就是在用接口调用的...
  • package ...import java.io.IOException;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.a...
  • java 后台调用外部接口

    千次阅读 2017-12-13 17:36:17
    import org.apache.commons.httpclient.HttpStatus; //重新组成一数据  SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");  List> newlist=new ArrayList();...Map text=new HashMap
  • java调用https接口

    万次阅读 2019-07-10 17:59:36
    import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; public class MyX509TrustManager implements X509TrustManager{ @...
  • Java 调用Http Rest接口 例子说明

    热门讨论 2016-07-07 21:50:21
    Java 调用Http Rest接口 例子说明
  • 通过base64加密方式将用户名和密码进行封装,生成basic auth的认证信息,再将该信息塞进请求头里,最后通过认证进行get请求
  • Java代码:调用外部接口(使用Json格式传递参数)的方法   https://blog.csdn.net/guoshijie8023/article/details/81634278 代码如下:  String url="所给外部接口的url";  //创建连接对象  ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 139,084
精华内容 55,633
关键字:

java请求外部接口

java 订阅