2010-06-22 3 views
5

В настоящее время я пытаюсь выполнить аутентификацию с помощью сервера через HTTP Get call. Приведенный ниже код работает при компиляции в проекте java. Возврат правильного токена в программу. Однако всякий раз, когда я пытаюсь реализовать тот же код в Android, я не получаю токен, возвращенный с помощью вызова Get.Запрос Https, аутентификация в Android

В Android я возвращаю inputLine в функции, однако inputLine всегда является пустой строкой.

System.out.println() печатает возвращенный токен.

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URL; 
import javax.net.ssl.HttpsURLConnection; 

public class JavaHttpsExample 
{ 

public static void main(String[] args) 
{ String inputLine = new String(); 
    try 
    { 
    String httpsURL = "https://the url"; 
    URL myurl = new URL(httpsURL); 
    HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection(); 
    InputStream ins = con.getInputStream(); 
    InputStreamReader isr=new InputStreamReader(ins); 
    BufferedReader in =new BufferedReader(isr); 

    inputLine = in.readLine(); 

    System.out.println(inputLine); 

    in.close(); 


    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 
} 

благодарит за вашу помощь !!!

+0

вы можете увидеть, что происходит на стороне сервера? Журналы доступа, коды состояния и т. Д. –

+0

, к сожалению, нет, сервер размещен за пределами – Mango

+0

Когда я запускаю код на Android, кажется, что он всегда терпит неудачу в строке «InputStream ins - con.getInputStream();» он выдает исключение IOException. Однако этого не происходит, когда я запускаю код как приложение Java. – Mango

ответ

2

Возможно, вы не добавили разрешение Интернета в свои проекты AndroidManifest.xml. Если да, то добавьте следующую строку в качестве дочернего <manifest/> узла:

<uses-permission android:name="android.permission.INTERNET" /> 
2

Я использую POST и FormEntity для извлечения данных с сервера (например, аутентификации), и я никогда не было никаких проблем:

final String httpsURL = "https://the url"; 
final DefaultHttpClient client = new DefaultHttpClient(); 
final HttpPost httppost = new HttpPost(httpsURL); 

//authentication block: 
final List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>(); 
nvps.add(new BasicNameValuePair("userName", userName)); 
nvps.add(new BasicNameValuePair("password", password)); 
final UrlEncodedFormEntity p_entity = new UrlEncodedFormEntity(nvps, HTTP.UTF_8); 
httppost.setEntity(p_entity); 

//sending the request and retrieving the response: 
HttpResponse response = client.execute(httppost); 
HttpEntity responseEntity = response.getEntity(); 

//handling the response: responseEntity.getContent() is your InputStream 
final InputSource inputSource = new InputSource(responseEntity.getContent()); 
[...] 

может быть, вы найдете этот ПОЛЕЗНЫЕ

+0

это кажется действительно прямым для SSL, я удивлен, что SchemeRegistry не использует регистрационную схему «https», как этот человек: http://stackoverflow.com/questions/2603691/android-httpclient-and-https/2603786 # 2603786 –

Смежные вопросы