1. 程式人生 > >org.apache.commons.net.util.Base64的encodeBase64String方法的坑

org.apache.commons.net.util.Base64的encodeBase64String方法的坑

今天在做汽車之家介面資料呼叫時,發現一個問題,由於對方伺服器有身份驗證,需要根據一定的格式將相關資訊加密然後轉成Base64然後放到http請求的header中。

我在實際操作中遇到奇怪問題,明明加密後的字串是錯的,可對方的iis服務卻能收到這個錯誤的請求,儘管不會通過身份驗證,這時返回錯誤程式碼是401,標識沒有許可權,其實就是身份驗證失敗。

但修改程式碼後,確認了加密後的字串的正確性,可對方iis服務死活接收不到請求,我觀察了下返回的錯誤程式碼是400,這標識這個請求是錯誤的,因此應該跟汽車之家的介面沒有關係,所以就仔細的檢查了請求引數。

終於….發現了問題的所在。

String encryptUrl = autohomeTripleDES.EncryptUrl(signUrl, CARHOMEUSERNAME, CARHOMEPASSWORD);
encryptUrl = Base64.encodeBase64String(encryptUrl.getBytes("UTF-8"
)); Header[] headers = {new BasicHeader("Authorization","Basic " + encryptUrl)}; String json = HttpJsonClient.getJsonData(signUrl, null, 60,headers);

這是我原來的程式碼,上面兩次encryptUrl的結果分別是如下圖,仔細看圖別被結果迷惑:

這裡寫圖片描述
這裡寫圖片描述

看出區別了吧,轉Base64後得到的字串結尾有多餘的東西,仔細看第二張圖,我被這張圖坑了,一開始我以為只有結尾會有,所以就直接encryptUrl.trim();結果請求死活過不去就是400,我就又回來仔仔細細的看了一遍資料,發現不單結尾有\r\n字串的中間也有\r\n

真是坑爹啊,然後使用下面程式碼把\r\n替換掉,請求成功!

String encryptUrl = autohomeTripleDES.EncryptUrl(signUrl, CARHOMEUSERNAME, CARHOMEPASSWORD).replaceAll("\r\n", "");
encryptUrl = Base64.encodeBase64String(encryptUrl.getBytes("UTF-8")).replaceAll("\r\n", "");

程式碼返回值結果參見下圖,這回正常了。

這裡寫圖片描述
這裡寫圖片描述

相關推薦

org.apache.commons.net.util.Base64的encodeBase64String方法

今天在做汽車之家介面資料呼叫時,發現一個問題,由於對方伺服器有身份驗證,需要根據一定的格式將相關資訊加密然後轉成Base64然後放到http請求的header中。 我在實際操作中遇到奇怪問題,明明加密後的字串是錯的,可對方的iis服務卻能收到這個錯誤的請求,儘

【FTP】org.apache.commons.net.ftp.FTPClient實現復雜的上傳下載,操作目錄,處理編碼

ttr hide working log 登錄 有一個 ima spl att 和上一份簡單 上傳下載一樣 來,任何的方法不懂的,http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/

org.apache.commons.net.ftp.FTPClient

package com.util; import java.io.*; import java.net.SocketException; import java.text.SimpleDateFormat; import java.util.ArrayList; import

【Java筆記】java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解決方法

解決方法:匯入commons-logging.jar包 如果用的是maven直接用: <dependency>         <groupId>commons-logging</g

FTP-org.apache.commons.net.io.CopyStreamException: IOException caught while copying.

問題(下載ftp檔案): 寫一個ftp下載程式,出現很怪異的錯誤,寫得過程中會出現空指標,  有時候又出現java.net.SocketTimeoutException: Read timed out, 還會出現org.apache.commons.net.io.CopyS

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解決方法

解決方法:匯入commons-logging.jar包 如果用的是maven直接用: <dependency>         <groupId>commons-logging</groupId>         <artifact

判斷字串是否為空的org.apache.commons.lang3.StringUtils類方法isBlank()原始碼檢視

轉發請註明出處與作者。個人分析的,正確性歡迎大家一起探討,有錯誤還希望指正和批評 首先說結論:isBlank() 會把製表符(tab鍵 \t,換行符 \n ,回車鍵等一系列字元格式的unicode編碼)等作為空來處理;而我們平時使用的 if(s == null ||"".

Java org.apache.commons >commons-lang3的常用方法

一.常用方法 1. 檢查字串是否為空: static boolean isBlank(CharSequence str) 判斷字串是否為空或null; static boolean isNotBlank(CharSequence str) 判斷字串是否非空或非null;

關於出現 org.apache.commons.lang.exception.NestableRuntimeException的解決方法

出現了 org.apache.commons.lang.exception.NestableRuntimeException等狀況。實在令人頭大,翻到了一個很好的帖子說明了這個問題。 原文網址如下:1 http://blog.csdn.net/zb0567/article/detail

找不到org.apache.commons.pool2.impl.GenericObjectPoolConfig的解決方法

maven依賴版本不對,最好不要指定下級依賴的版本號,讓上級依賴去自己選擇最合適的version。 GenericObjectPoolConfig沒有找到是因為spring-data-redis版本太

java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource的解決方法

資訊: Starting Servlet Engine: Apache Tomcat/6.0.132007-12-17 19:31:06 org.apache.struts.action.ActionServlet initModuleDataSources嚴重: Initializing applicati

org.apache.commons.lang3.StringUtils工具類常用方法

在開發中,Apache 的 StringUtils 工具類有許多方法比 jdk 實現的方便許多。所有整理了幾個常用的: import org.apache.commons.lang3.StringUtils; public class StringUtilsTest {

org/apache/commons/pool/impl/GenericObjectPool 的解決方法

log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext). log4j:WARN Please

3.網上解決org.apache.commons.lang.xwork.StringUtils的方法都弱爆了,看我怎麼解決它!

網上解決org.apache.commons.lang.xwork.StringUtils的方法都弱爆了,看我怎麼解決它!                                      

使用Apache Commons Net API實現FTP上傳下載過程中的

       最近專案需要實現FTP上傳、下載功能,採用了Apache Commons Net API。程式碼很快就完成了,但由於對相關API使用場景不是很熟悉,走了一些彎路,抽一點時間做一下總結。         A)主動被動模式選擇:FTP主動模式和被動模式的詳細介紹可

java.lang.NoSuchMethodError: org.apache.commons.validator.Validator.setParameter(Ljava/lang/String;Ljava/lang/Object;)V解決方法

ERROR 2009-07-16 11:29:49 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/zxtest].[action] Servlet.service() for servlet a

org.apache.commons.lang.StringUtils(StringUtils工具類的常用方法

工作容易遇到的: 必須要8位,不夠的就拿0去補 System.out.println(StringUtils.leftPad("34", 8, "0")); // 00000034 又或者你需要在一個數組中加入一個元素,你可以這麼做: 把數組裡的字串用:連線 S

org.apache.commons.fileupload上傳臨時檔案刪除方法2則

在將檔案項封裝成FileItem 物件時,如果檔案尺寸大於臨界值,將會被寫入臨時檔案。清理方法1這些臨時檔案在不再被使用的時候(如果相應的java.io.File是可回收的則更好)會自動被刪除.這會被org.apache.commons.io.FileCleaningTrac

java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

apache con ont test oca action error esp iat 1.java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils 缺少類 2. There is no Ac

java.lang.ClassNotFoundException: org.apache.commons.dbutils.QueryRunner

ica ror server acc dwr comm erro tor reads 七月 28, 2017 11:06:33 下午 org.apache.catalina.core.StandardWrapperValve invoke嚴重: Servlet.serv