java請求https
A. java https請求 中文亂碼問題
嘗試的方法:
1. 在服務端接收到參數時,utf-8轉gbk,無效。
2. 在服務端接收到參數時,iso-8859-1轉gbk,無效。
3. 在發送請求前將中文參數轉碼,utf-8轉iso-8859-1,無效。代碼如下:
new String(remark.getBytes(「UTF-8」), 「ISO-8859-1」)
4. 在請求端,HttpHeader設定ContentType為「application/json;UTF-8」,無效。代碼如下:
headers.setContentType(Media.valueOf(「application/json;UTF-8」));
寫到這里,有人應該感覺到這有點「病急亂投醫」的感覺了,沒有頭緒地在試著各種方式。是的,起初我覺得是請求header中採用了ISO-8859-1的編碼,但嘗試後很顯然不是;後來我覺著是否是RestTemplate中採用的HttpMessageConverter方式所決定的,但沒能找到很好的證明方式,查資料說的是StringHttpMessageConverter默認採用的是ISO-8859-1編碼,可我覺得我指定了ContentType為application/json,RestTemplate不應該去調用StringHttpMessageConverter啊,其中的原理還有待深究。個人感覺這種情況出問題的可能性最大。
最後,在網上看到一篇文章後,看了一種建議方式,並且是可行的,就是使用URLEncode,將中文參數在傳參前進行encode.這里以GBK編碼是為了在伺服器端接收參數後無需再轉碼了,如下:
list.add(URLEncode.encode(name, 「GBK」));
URLEncode方式可以解決這種特定場景的中文亂碼問題,相信理解其原理後還可以運用到更多的場景。目前我在網上看到的,關於用URLEncode處理中文亂碼最多的場景就是文件下載時中文文件名亂碼。
B. 怎樣用java調用https介面
下面這個函數可以直接用:
public static String requsetUrl(String urls) throws Exception{
BufferedReader br = null;
String sTotalString= "";
try{
URL url = new URL(urls);
URLConnection connection = url.openConnection();
connection.setConnectTimeout(3000);
connection.setDoOutput(true);
String line = "";
InputStream l_urlStream;
l_urlStream = connection.getInputStream();
br = new BufferedReader(new InputStreamReader(l_urlStream, "UTF-8"));
while ((line = br.readLine()) != null) {
sTotalString += line + "\r\n";
}
} finally {
if(br!=null){
try {
br.close();
} catch (IOException e) {
br = null;
}
}
}
return sTotalString;
}
C. java配置ssl實現https請求,一級域名和二級域名配置https,小程序https後台的配置
為使小程序開發中使用HTTPS,本文將指引你使用Java部署伺服器並配置HTTPS。實現HTTPS需滿足以下條件:申請SSL證書(阿里雲或騰訊雲提供免費服務)、擁有自己的伺服器(阿里雲或騰訊雲均可)。接下來,我們分步驟進行詳細說明。
一、申請SSL證書
以騰訊雲為例,首先登錄伺服器進入SSL證書申請頁面,選擇免費SSL證書,申請並綁定域名,注意一個證書僅能綁定一個頂級或二級域名。申請成功後,即可下載證書。
二、下載SSL證書
下載壓縮包解壓,獲取適用於伺服器的證書文件,根據實際情況選擇。對於Tomcat伺服器,查看獲取的文件內容。
三、Springboot項目配置SSL證書
配置完成後,使用Maven打包項目,打包後修改jar包名稱,通過FileZilla上傳至伺服器。為確保項目後台運行,使用預先定義的腳本文件,包括用於長期後台運行的三個腳本。
四、伺服器部署與運行項目
登錄伺服器,進入對應目錄,執行run.sh腳本啟動項目。若遇到許可權問題,可在腳本所在目錄執行chmod命令。運行成功後,通過命令驗證項目啟動狀態。
五、訪問HTTPS
成功執行run.sh腳本後,通過驗證命令查看項目狀態。成功啟動後,訪問HTTPS地址,即可完成HTTPS配置。至此,完成伺服器HTTPS配置,將域名配置至小程序中,即可在小程序中使用HTTPS。
視頻講解可查閱:study.163.com/course/co...
D. 求解java怎樣發送https請求
使用httpClient可以發送,具體的可以參考下面的代碼
SSLClient類,繼承至HttpClient
importjava.security.cert.CertificateException;
importjava.security.cert.X509Certificate;
importjavax.net.ssl.SSLContext;
importjavax.net.ssl.TrustManager;
importjavax.net.ssl.X509TrustManager;
importorg.apache.http.conn.ClientConnectionManager;
importorg.apache.http.conn.scheme.Scheme;
importorg.apache.http.conn.scheme.SchemeRegistry;
importorg.apache.http.conn.ssl.SSLSocketFactory;
importorg.apache.http.impl.client.DefaultHttpClient;
//用於進行Https請求的HttpClient
{
publicSSLClient()throwsException{
super();
SSLContextctx=SSLContext.getInstance("TLS");
X509TrustManagertm=newX509TrustManager(){
@Override
publicvoidcheckClientTrusted(X509Certificate[]chain,
StringauthType)throwsCertificateException{
}
@Override
publicvoidcheckServerTrusted(X509Certificate[]chain,
StringauthType)throwsCertificateException{
}
@Override
publicX509Certificate[]getAcceptedIssuers(){
returnnull;
}
};
ctx.init(null,newTrustManager[]{tm},null);
SSLSocketFactoryssf=newSSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManagerccm=this.getConnectionManager();
SchemeRegistrysr=ccm.getSchemeRegistry();
sr.register(newScheme("https",443,ssf));
}
}
HttpClient發送post請求的類
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importjava.util.Map.Entry;
importorg.apache.http.HttpEntity;
importorg.apache.http.HttpResponse;
importorg.apache.http.NameValuePair;
importorg.apache.http.client.HttpClient;
importorg.apache.http.client.entity.UrlEncodedFormEntity;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.message.BasicNameValuePair;
importorg.apache.http.util.EntityUtils;
/*
*利用HttpClient進行post請求的工具類
*/
publicclassHttpClientUtil{
publicStringdoPost(Stringurl,Map<String,String>map,Stringcharset){
HttpClienthttpClient=null;
HttpPosthttpPost=null;
Stringresult=null;
try{
httpClient=newSSLClient();
httpPost=newHttpPost(url);
//設置參數
List<NameValuePair>list=newArrayList<NameValuePair>();
Iteratoriterator=map.entrySet().iterator();
while(iterator.hasNext()){
Entry<String,String>elem=(Entry<String,String>)iterator.next();
list.add(newBasicNameValuePair(elem.getKey(),elem.getValue()));
}
if(list.size()>0){
UrlEncodedFormEntityentity=newUrlEncodedFormEntity(list,charset);
httpPost.setEntity(entity);
}
HttpResponseresponse=httpClient.execute(httpPost);
if(response!=null){
HttpEntityresEntity=response.getEntity();
if(resEntity!=null){
result=EntityUtils.toString(resEntity,charset);
}
}
}catch(Exceptionex){
ex.printStackTrace();
}
returnresult;
}
}
測試代碼
importjava.util.HashMap;
importjava.util.Map;
//對介面進行測試
publicclassTestMain{
privateStringurl="https://192.168.1.101/";
privateStringcharset="utf-8";
=null;
publicTestMain(){
httpClientUtil=newHttpClientUtil();
}
publicvoidtest(){
StringhttpOrgCreateTest=url+"httpOrg/create";
Map<String,String>createMap=newHashMap<String,String>();
createMap.put("authuser","*****");
createMap.put("authpass","*****");
createMap.put("orgkey","****");
createMap.put("orgname","****");
StringhttpOrgCreateTestRtn=httpClientUtil.doPost(httpOrgCreateTest,createMap,charset);
System.out.println("result:"+httpOrgCreateTestRtn);
}
publicstaticvoidmain(String[]args){
TestMainmain=newTestMain();
main.test();
}
}