HttpClient client = new HttpClient(context, new ReturnProcess(), params_hash_map);
client.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, URL);
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.widget.Toast;
import org.apache.http.client.ClientProtocolException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
public class HttpClient extends AsyncTask<String, String, String>
{
Context context;
CallReturn callReturn;
LinkedHashMap params;
public HttpClient (Context context, CallReturn callReturn, LinkedHashMap params)
{
this.context = context;
this.callReturn = callReturn;
this.params = params;
}
@Override
protected String doInBackground(String... url)
{
String responseString = null;
try
{
if (isNetworkConnected())
{
responseString = getInternetData(url[0], params);
if (responseString.equalsIgnoreCase("ENDUP") || responseString.equalsIgnoreCase("logout"))
{
// Logs.isLogout = true;
}
}
else
{
responseString = "NoInterNet";
}
}
catch (ClientProtocolException e)
{
responseString = "ClientProtocolException";
Utilities.handleException(e);
}
catch (IOException e)
{
responseString = "IOException";
Utilities.handleException(e);
}
catch (Exception e)
{
responseString = "Exception";
Utilities.handleException(e);
}
return responseString;
}
@Override
protected void onPostExecute(String s)
{
super.onPostExecute(s);
callReturn.onCallCompleted(s);
}
public boolean isNetworkConnected()
{
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni == null)
{
return false; // There are no active networks.
}
else
{
return true;
}
}
private String getInternetData(String uri, LinkedHashMap params) throws Exception
{
// BufferedReader in = null;
String data = null;
try
{
/* NEW Working */
// String url = params[0];
String USER_AGENT = "Mozilla/5.0";
StringBuilder tokenUri = new StringBuilder();
Iterator iterator = params.keySet().iterator();
while (iterator.hasNext())
{
String key=(String)iterator.next();
String value=(String)params.get(key);
tokenUri.append(key + value);
}
URL obj = new URL(uri);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Accept-Language", "UTF-8");
con.setDoOutput(true);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(con.getOutputStream());
outputStreamWriter.write(tokenUri.toString());
outputStreamWriter.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null)
{
response.append(inputLine);
}
in.close();
data = response.toString();
return data;
}
catch (Exception ex)
{
Utilities.handleException(ex);
return data;
}
// finally
// {
// if (in != null)
// {
// try
// {
// in.close();
// return data;
// }
// catch (Exception e)
// {
// Utilities.handleException(e);
// }
// }
// }
}
}
首先,您需要在设备安全设置中安装自签名的SSL.cer文件。然后需要添加network_security_config.xml并将其添加到清单中。
android:networkSecurityConfig="@xml/network_security_config"
有几种配置网络安全的方法:信任证书的方法。我认为最好的方法是只信任自定义CA进行调试:
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
但您也可以始终信任用户添加的CA:
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system"/>
<certificates src="user"/>
</trust-anchors>
</base-config>
问题内容: android应用有三台主机进行身份验证和授权。最终主机是REST API。首次使用Oauth身份验证和授权过程,它可以正常工作。 但是,如果 用户 在登录并访问REST API提供的服务后 杀死了该应用程序 ,然后再次打开该应用程序,则会出现此问题。 在这段时间内,身份验证和授权过程不会发生,只有REST API会发生。 这是造成原因, 但在首次使用(登录然后使用该应用程序)期间正在
问题内容: 在我的服务器(生产服务器)中,我具有goDaddy ssl证书。我有iOS和Android应用程序都与服务器连接,iOS都没有问题连接,Android版本为4. 一切都很好,但是设备版本为2.3。我总是收到SSLHandshakeException。 我在Android开发人员页面(https://developer.android.com/training/articles/secu
我正在Android上开发一个客户端应用程序,它连接到我的服务器,它在负载均衡器后面的AWS上,我在GoDaddy上创建了一个SSL证书,并将其添加到负载均衡器上。 浏览器上的一切都很顺利,它可以识别证书,但是当我试图用Android调用API时,我遇到了一个例外: 我找到了一些讨论谁说在app上添加证书,但是在证书服务器端是不是就没有办法修复了呢?这不是证书的问题吗?
我正试图通过OKHttp和改装2提出请求。该请求应通过发送证书(必须是p12或crt)完成。我们尝试过不同的方法,但没有人允许我成功。我正在用badssl进行测试。com,它允许我请求此URL:https://client.badssl.com您可以在这里找到证书:https://badssl.com/download/ 我尝试将p12和crt包含在项目的assets文件夹和raw文件夹中,并创建
那里我需要与建立https连接https://free.temafon.ru但我在Android2.3及以下版本上遇到了CertPathValidator异常。我做了什么。 > 最终密钥库密钥库=密钥库。getInstance(“BKS”); 在这里,我使用custom TrustManager,因为服务器以错误的顺序发送证书。 此代码在Android 4.0上运行良好,但在2.3上失败,
问题内容: 我正在尝试建立与HTTPS站点的连接,并且我GOT打印例外:。 我的原始代码如下: 然后,我在这里阅读了Google的文章,并将代码修改为: 关于文件,我使用此站点来检查该站点的证书。我发现了3个证书,我不知道该使用哪个证书。我一一尝试。 一个名称“ VeriSign 3类公共主要证书颁发机构-G5”导致以下例外: 当我使用一个名称为“ VeriSign Class 3 Secure