Intereting Posts
Где я могу найти хорошие игры с открытым исходным кодом для ускорения процесса обучения? Как установить общее проверяемое поведение во всех группах в NavigationView? Запуск FeedbackActivity в моем приложении, как в Android Hangouts В студии android, как открыть несколько проектов в одном окне? Pojo анализирует gson с недопустимыми именами java Как создать Uri из URL? Знаки оси Force BarChart Y являются целыми числами? Как узнать, сколько свободного размера кучи доступно для растрового изображения для Android 2. *? Может ли кто-нибудь подтвердить эту проблему (ограниченное количество файловых дескрипторов на некоторых устройствах Android)? Временные зависимости проекта библиотеки библиотеки Android освобождают тип AAR Android: Можно ли обновить только один элемент в списке? Что такое рекламная и функциональная графика в Android Market / Play Store? Используйте RxJava и Retrofit для перебора списка и увеличения результатов на основе подзапросов Android: последствия наличия targetSDK> BuildTarget Android-манипулирование событиями, когда отображается меню

Android – HTTP GET Request

Я разработал HTTP GET-метод, который явно работает.

public class GetMethodEx { public String getInternetData() throws Exception{ new TrustAllManager(); new TrustAllSSLSocketFactory(); BufferedReader in = null; String data = null; try { HttpClient client = new DefaultHttpClient(); URI website = new URI("https://server.com:8443/Timesheets/ping"); HttpGet request = new HttpGet(); request.setURI(website); HttpResponse response = client.execute(request); response.getStatusLine().getStatusCode(); in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(""); String l = ""; String nl = System.getProperty("line.separator"); while ((l = in.readLine()) !=null){ sb.append(l + nl); } in.close(); data = sb.toString(); return data; } finally{ if (in != null){ try{ in.close(); return data; }catch (Exception e){ e.printStackTrace(); } } } } 

Вот экран печати моего эмулятора при получении ответа от www.google.com

ЭКРАНА РАБОТЫ GOOGLE.COM

Следующий код – мой метод извлечения, чтобы отображать его на экране.

 public class Home extends Activity { TextView httpStuff; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.httpexample); httpStuff = (TextView) findViewById(R.id.tvhttp); new LongOperation().execute(""); } private class LongOperation extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { GetMethodEx test = new GetMethodEx(); String returned = null; try { returned = test.getInternetData(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return returned; } @Override protected void onPostExecute(String result) { httpStuff.setText(result); } 

Однако, когда я пытаюсь это сделать с моим собственным сервером.

" Https: // server: port / xwtimesheets / ping "

У меня есть следующий экран

МОЙ СЕРВЕР, НЕ РАБОТАЕТ

Solutions Collecting From Web of "Android – HTTP GET Request"

Здесь отредактирована версия вашего класса GetMethodEx. MySSLSocketFactory позволяет подключать любой сервер без проверки их сертификата. Как вы знаете, это небезопасно. Я рекомендую вам добавить сертификат своих серверов в качестве надежного устройства.

Кстати, срок действия сертификата вашего сервера истек. Даже если вы добавите его как доверенное, вы не сможете подключиться к своему серверу.

 public class GetMethodEx { public String getInternetData() throws Exception { BufferedReader in = null; String data = null; try { HttpClient client = new DefaultHttpClient(); client.getConnectionManager().getSchemeRegistry().register(getMockedScheme()); URI website = new URI("https://server.com:8443/XoW"); HttpGet request = new HttpGet(); request.setURI(website); HttpResponse response = client.execute(request); response.getStatusLine().getStatusCode(); in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(""); String l = ""; String nl = System.getProperty("line.separator"); while ((l = in.readLine()) != null) { sb.append(l + nl); } in.close(); data = sb.toString(); return data; } finally { if (in != null) { try { in.close(); return data; } catch (Exception e) { Log.e("GetMethodEx", e.getMessage()); } } } } public Scheme getMockedScheme() throws Exception { MySSLSocketFactory mySSLSocketFactory = new MySSLSocketFactory(); return new Scheme("https", mySSLSocketFactory, 443); } class MySSLSocketFactory extends SSLSocketFactory { javax.net.ssl.SSLSocketFactory socketFactory = null; public MySSLSocketFactory(KeyStore truststore) throws Exception { super(truststore); socketFactory = getSSLSocketFactory(); } public MySSLSocketFactory() throws Exception { this(null); } @Override public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { return socketFactory.createSocket(socket, host, port, autoClose); } @Override public Socket createSocket() throws IOException { return socketFactory.createSocket(); } javax.net.ssl.SSLSocketFactory getSSLSocketFactory() throws Exception { SSLContext sslContext = SSLContext.getInstance("TLS"); TrustManager tm = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }; sslContext.init(null, new TrustManager[] { tm }, null); return sslContext.getSocketFactory(); } } } - public class GetMethodEx { public String getInternetData() throws Exception { BufferedReader in = null; String data = null; try { HttpClient client = new DefaultHttpClient(); client.getConnectionManager().getSchemeRegistry().register(getMockedScheme()); URI website = new URI("https://server.com:8443/XoW"); HttpGet request = new HttpGet(); request.setURI(website); HttpResponse response = client.execute(request); response.getStatusLine().getStatusCode(); in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(""); String l = ""; String nl = System.getProperty("line.separator"); while ((l = in.readLine()) != null) { sb.append(l + nl); } in.close(); data = sb.toString(); return data; } finally { if (in != null) { try { in.close(); return data; } catch (Exception e) { Log.e("GetMethodEx", e.getMessage()); } } } } public Scheme getMockedScheme() throws Exception { MySSLSocketFactory mySSLSocketFactory = new MySSLSocketFactory(); return new Scheme("https", mySSLSocketFactory, 443); } class MySSLSocketFactory extends SSLSocketFactory { javax.net.ssl.SSLSocketFactory socketFactory = null; public MySSLSocketFactory(KeyStore truststore) throws Exception { super(truststore); socketFactory = getSSLSocketFactory(); } public MySSLSocketFactory() throws Exception { this(null); } @Override public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { return socketFactory.createSocket(socket, host, port, autoClose); } @Override public Socket createSocket() throws IOException { return socketFactory.createSocket(); } javax.net.ssl.SSLSocketFactory getSSLSocketFactory() throws Exception { SSLContext sslContext = SSLContext.getInstance("TLS"); TrustManager tm = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }; sslContext.init(null, new TrustManager[] { tm }, null); return sslContext.getSocketFactory(); } } } 

У вас есть ошибка здесь:

 URI website = new URI("https://https://ts.xoomworks.com:8443/XoomworksTimesheets/ping"); 

Вы используете «https: //» дважды.

EDIT: Я получил код отсюда

Ваш код должен выглядеть так:

 HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; DefaultHttpClient client = new DefaultHttpClient(); SchemeRegistry registry = new SchemeRegistry(); SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory(); socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier); registry.register(new Scheme("https", socketFactory, 8443)); SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry); DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams()); // Set verifier HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier); // Example send http request final String url = "https://ts.xoomworks.com:8443/XoomworksTimesheets/ping/"; HttpPost httpPost = new HttpPost(url); HttpResponse response = httpClient.execute(httpPost); response.getStatusLine().getStatusCode(); in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(""); String l = ""; String nl = System.getProperty("line.separator"); while ((l = in.readLine()) !=null){ sb.append(l + nl); } in.close(); data = sb.toString(); return data; 

Я не тестировал это на моем конце, но он должен работать. Обратите внимание, что вы используете порт 8433 вместо 433, поэтому я изменил его в схеме socketfactory.

Будьте осторожны, с новой версией API весь этот код устарел !

Вот пример http get с новым api .

 RequestQueue queue = Volley.newRequestQueue(this); String url ="http://www.google.com"; // Request a string response from the provided URL. StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { // Display the first 500 characters of the response string. mTextView.setText("Response is: "+ response.substring(0,500)); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mTextView.setText("That didn't work!"); } }); // Add the request to the RequestQueue. queue.add(stringRequest); 

Источник с сайта android: https://developer.android.com/training/volley/simple.html

HttpClient устарел. Итак, новый способ: во-первых, добавьте две зависимости в build.gradle:

 compile 'org.apache.httpcomponents:httpcore:4.4.1' compile 'org.apache.httpcomponents:httpclient:4.5' 

Затем напишите этот код в ASyncTask в методе doBackground .

  URL url = new URL("http://localhost:8080/web/get?key=value"); HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); urlConnection.setRequestMethod("GET"); int statusCode = urlConnection.getResponseCode(); if (statusCode == 200) { InputStream it = new BufferedInputStream(urlConnection.getInputStream()); InputStreamReader read = new InputStreamReader(it); BufferedReader buff = new BufferedReader(read); StringBuilder dta = new StringBuilder(); String chunks ; while((chunks = buff.readLine()) != null) { dta.append(chunks); } } else { //Handle else } 

Примечание . Не забывайте обрабатывать исключения в коде.