記錄環信IM使用restful介面時遇到的傳送PUT請求失敗的問題
問題發生在環信修改使用者密碼的介面上,介面如下
PUT https://{host}/{org_name}/{app_name}/users/{username}/password
1.
token是已經存在於redis中的,這裡我的程式碼中是直接取的。
@Override
public boolean modifyPassword (String username, String password) throws IOException {
HashMap<String,String> map =new HashMap<> ();
URL url = new URL (" + host + "/" + orgName + "/" + appName + "/users/" + username + "/password");
HttpURLConnection connection = (HttpURLConnection) url.openConnection ();
// 設定請求方法為PUT
connection.setRequestMethod ("PUT");
// 設定請求頭部資訊
connection.setRequestProperty("Accept", "application/json");
String token = (String) redisTemplate.opsForValue ().get (RedisKeyConfig.IM_TOKEN);
connection.setRequestProperty ("Authorization","Bearer"+token);
// 開啟輸出流,寫入請求體資料
connection.setDoOutput(true);
OutputStream outputStream = connection.getOutputStream();
String requestBody = "{\"newpassword\": \""+password+"\"}";
outputStream.write(requestBody.getBytes());
outputStream.flush();
// 傳送請求並獲取響應
int responseCode = connection.getResponseCode();
// 讀取響應資料
BufferedReader reader = new BufferedReader(new InputStreamReader (connection.getInputStream()));
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
String substring = response.substring (1, response.length () - 1);
System.out.println (substring);
connection.disconnect();
if(substring.contains ("set user password")){
return true;
}
return false;
}
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.
按理來說,到這裡請求是符合環信介面要求的,但是神奇的事情發生了,這裡顯示傳送了一個get請求,但我設定的是put請求。這次請求不出意外的返回了錯誤碼401。
本以為是請求方式設定沒有成功,亦或者是connection.setRequestProperty ("Authorization","Bearer "+redisTemplate.opsForValue ().get (RedisKeyConfig.IM_TOKEN));的寫法導致token有問題。
在排查一圈後注意到了AI的一句話。
加上空格後問題果然解決了。
然後瞭解了一下,Bearer後面必須帶空格,然後才能拼接token,至於原因,沒有找到可引用的內容。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70030722/viewspace-3002113/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在html中使用axios傳送請求到servlet時遇到的傳值問題HTMLiOSServlet
- Vue 使用 Axios 傳送請求的請求體問題VueiOS
- 解決.NET Core Ajax請求後臺傳送引數過大請求失敗問題
- 記錄剛做完的環信+ucloud直播遇到的問題Cloud
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- Laravel POST 請求 API 介面,使用自定義表單驗證,驗證失敗跳轉回首頁的問題記錄LaravelAPI
- 請求OpenFeign的GET請求時,請求為何失敗?
- 呼叫ASP.NET Web API不能傳送PUT/DELETE請求ASP.NETWebAPIdelete
- 求助,遇到個問題!jmeter 可以錄製公網的介面請求,但區域網的介面錄製不到JMeter
- 關於用URL類傳送POST請求的問題?
- WebSocket的SSL認證失敗問題記錄Web
- 使用Postman傳送POST請求的指南Postman
- Laravel框架傳送Email遇到的問題Laravel框架AI
- 記錄使用Performance API遇到的問題ORMAPI
- 使用HttpClient傳送GET請求HTTPclient
- 使用httpclient傳送http請求HTTPclient
- 安卓端出現https請求失敗的一次問題排查安卓HTTP
- 使用Feign傳送HTTP請求HTTP
- postman傳送請求使用篇(二)Postman
- 使用C#傳送POST請求C#
- Spartacus payment types 在 checkout 步驟中傳送 HTTP put 請求的實現明細HTTP
- 【python介面自動化】- 使用requests庫傳送http請求PythonHTTP
- 一、put請求
- 大請求、請求超時問題
- HttpWebRequest請求http1.1的chunked的解析問題記錄HTTPWeb
- 記錄 openssl 證書驗證失敗的詭異問題
- 記錄一次刪除檔案失敗的問題
- Postman傳送請求引數是Map格式的請求Postman
- 用conda安裝庫時遇到環境查詢失敗問題解決方案
- 什麼時候會傳送options請求
- jQuery裡如何使用ajax傳送請求jQuery
- 使用requests庫來傳送HTTP請求HTTP
- nodejs使用request傳送http請求NodeJSHTTP
- 『居善地』介面測試 — 5、使用Requests庫傳送POST請求
- 使用socket.io-client-swift遇到傳送不了資料的問題clientSwift
- 使用spring遇到問題 事物不提交和更新失敗Spring
- Postman傳送Post請求Postman
- Java傳送Post請求Java