Server returned HTTP response code: 401 for URL解决方案

您所在的位置:网站首页 页面返回401 Server returned HTTP response code: 401 for URL解决方案

Server returned HTTP response code: 401 for URL解决方案

2024-07-03 09:03| 来源: 网络整理| 查看: 265

请求url时报未认证错误解决 场景:需要用户验证,验证方式为HTTP Basic 验证。 使用: 1.设置请求参数并发送post请求:

JSONObject paramJson = new JSONObject(); paramJson.put("car_no", "苏A535KU"); paramJson.put("car_color", 2); paramJson.put("start_time", "2020-04-09 12:00"); paramJson.put("end_time", "2020-04-09 13:00"); String result = PostContect.sendHttpRequest("http://218.5.80.8:8065/api/v10/Car/HistoryTrackData",paramJson);

2.sendHttpRequest方法具体实现(问题出现)

public static String sendHttpRequest(String strUrl, JSONObject jsonData) { System.out.println("jsonData =" + jsonData.toString()); try { System.out.println("======" + new String(jsonData.toString().getBytes("utf-8"), "utf-8")); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } URL url = null; StringBuilder result = new StringBuilder(); BufferedReader bufferedReader = null; HttpURLConnection urlconn = null; OutputStreamWriter writer = null; // String string = "username:password"; // String encoding = Base64.encode(string.getBytes()); try { url = new URL(strUrl); urlconn = (HttpURLConnection) url.openConnection(); urlconn.setDoInput(true);// 设置输入流采用字节流模式 urlconn.setDoOutput(true); urlconn.setRequestMethod("POST"); // post请求不能使用缓存 urlconn.setUseCaches(false); urlconn.setRequestProperty("Content-Type", "application/json"); // + encoding // urlconn.setRequestProperty("Authorization", "Basic "+ encoding); urlconn.setConnectTimeout(5000); urlconn.setReadTimeout(8000); urlconn.connect();// 链接服务器并发送消息 writer = new OutputStreamWriter(urlconn.getOutputStream()); System.out.println("2=" + jsonData.toString()); writer.write(jsonData.toString()); writer.flush();// 发送,清除缓存 // 开始接收返回的数据 bufferedReader = new BufferedReader(new InputStreamReader(urlconn.getInputStream(), "UTF-8")); String readLine = ""; while ((readLine = bufferedReader.readLine()) != null) { result.append(readLine); } } catch (MalformedURLException e) { e.printStackTrace(); result.delete(0, result.length()); } catch (IOException e) { e.printStackTrace(); result.delete(0, result.length()); } catch (Exception e) { e.printStackTrace(); result.delete(0, result.length()); } finally { try { if (writer != null) { writer.close(); } if (bufferedReader != null) { bufferedReader.close(); } if (urlconn != null) { urlconn.disconnect(); } } catch (IOException e) { result.delete(0, result.length()); } } return result.toString(); }

解决方案: 在sendHttpRequest方法中加入以下内容

String login= "username:password"; String encoding = Base64.encode(login.getBytes()); urlconn.setRequestProperty("Authorization", "Basic "+ encoding);

勉强解释: 由HttpBasic登录验证联想到spring secrity的basic登录方式,其中就是对根据用户名和密码进行Base64编码用于验证,另外就是请求头带着这些信息进行basic登录方式的验证。 在这里插入图片描述 另外,根据POSTMAN中的提示,Authorization的认证方式还有很多,具体业务具体分析。请求别人的接口时,还应该多沟通,选用合适的方案。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3