您好我正在使用舊的Android項目,其中使用org.apache.httpclient
類現在折舊,將從API 22中刪除。我們如何進行遷移到httpUrlConnection
,但仍保持原有功能?我所有的HTTP POST現在不與錯誤錯誤發送和接收XML和JSON Android
22 16:16:33.755 5553-6064/com.singPost D/SingPost: payload: <OverseasPostalInfoDetailsRequest xmlns="http://singpost.com/paw/ns"><Country>AFAFG</Country><Weight>100</Weight><DeliveryServiceName></DeliveryServiceName><ItemType></ItemType><PriceRange>999</PriceRange><DeliveryTimeRange>999</DeliveryTimeRange></OverseasPostalInfoDetailsRequest>
08-22 16:16:33.755 5553-6064/com.singPost D/SingPost: Utils-request: https://prdesb1.singpost.com/ma/FilterOverseasPostalInfo
08-22 16:16:35.667 5553-6064/com.singPost E/SingPost: IOException: javax.net.ssl.SSLHandshakeException: Handshake failed
08-22 16:16:35.691 5553-6008/com.singPost E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f67d844e5c0
在這裏工作是我的web API調用:
public static String callWS(String url, String module, String method, String payload) throws UnsupportedEncodingException, ClientProtocolException, IOException, ParseException, Exception{
HttpClient httpsClient;
HttpPost httppost;
HttpResponse response = null;
String ret = "";
httpsClient = getHTTPSClient();
String request = url;
if(!module.equalsIgnoreCase("") && !method.equalsIgnoreCase("")){
request += "/" + module + "/" + method;
}else if(!module.equalsIgnoreCase("")){
request += "/" + module;
}else if(!method.equalsIgnoreCase("")){
request += "/" + method;
}
if(Constants.DEBUG_MODE){
Log.d(Constants.TAG, Utils.class.getSimpleName() + "-request: " + request);
}
try {
httppost = new HttpPost(request);
httppost.setHeader("Content-Type", Constants.contentType);
if(payload!=null && !payload.equalsIgnoreCase("")){
httppost.setEntity(new StringEntity(payload, HTTP.UTF_8));
}
response = httpsClient.execute(httppost);
System.out.println("??**"+response.toString());
if (response != null) {
ret = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println("Response: "+ret);
System.out.println("#############################################");
}
}catch(SocketTimeoutException e){
if(Constants.DEBUG_MODE){
Log.d(Constants.TAG, "SocketTimeoutException: " + e.toString());
}
}catch(Exception e){
//e.printStackTrace();
if(Constants.DEBUG_MODE){
Log.d(Constants.TAG, "Exception: " + e.toString());
}
}
return ret;
}
我getHTTPSClient()
public static DefaultHttpClient getHTTPSClient() {
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schemeRegistry.register(new Scheme("https", new EasySSLSocketFactory(), 443));
HttpParams params = new BasicHttpParams();
params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30);
params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(30));
params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
HttpConnectionParams.setConnectionTimeout(params, Constants.DEFAULT_CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, Constants.DEFAULT_SOCKET_TIMEOUT);
ConnManagerParams.setTimeout(params, Constants.DEFAULT_SOCKET_TIMEOUT);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
ClientConnectionManager cm = new SingleClientConnManager(params, schemeRegistry);
DefaultHttpClient httpClient= new DefaultHttpClient(cm, params);
return httpClient;
}
而且在活動(片段)我這樣打電話
result = Utils.callWS(Constants.getSP_WS_URL(), Constants.MODULE_MA, Constants.METHOD_POST_FILTER_OVERSEAS_POSTAL_INFO, payload);
一個possile端點:
https://prdesb1.singpost.com/ma/FilterOverseasPostalInfo
我檢查的有效載荷是正確的:
<OverseasPostalInfoDetailsRequest xmlns="http://singpost.com/paw/ns"><Country>AFAFG</Country><Weight>100</Weight><DeliveryServiceName></DeliveryServiceName><ItemType></ItemType><PriceRange>999</PriceRange><DeliveryTimeRange>999</DeliveryTimeRange></OverseasPostalInfoDetailsRequest>
任何人都知道可能錯誤的,我們該如何處理呢?非常感謝
您能張貼更多的錯誤信息嗎? – Henry