2012-03-11 3 views
1

Je me gratte la tête à ce problème que je n'arrive pas à comprendre. Ce que j'essaye de faire est d'extraire l'URL suivant le HTTPpost. Cela me permettra de passer par le processus d'Oauth.Comment extraire l'URL suite à un HTTPPost dans Android

Actuellement, je suis l'extraction de l'ensemble du site dans mon entité.

Par exemple: Les données seront affichées à https://mysite.com/login et redirigera après le poste à https://mysite.com/dashboard?code=3593085390859082093720

Comment peut-on extrait l'URL?

Si vous avez besoin de plus d'informations ou pouvez me diriger dans la bonne direction, tout est apprécié! Je vous remercie!

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.ResponseHandler; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.BasicResponseHandler; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class LoginActivity extends Activity implements OnClickListener { 

Button ok,back,exit; 
TextView result; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.login); 

    // Login button clicked 
    ok = (Button)findViewById(R.id.submit); 
    ok.setOnClickListener(this); 

    result = (TextView)findViewById(R.id.result); 

} 

public void postLoginData() { 
    // Create a new HttpClient and Post Header 
    HttpClient httpclient = new DefaultHttpClient(); 

    HttpPost httppost = new HttpPost("https://mysite.com/login"); 

    try { 
     // Add user name and password 
    EditText uname = (EditText)findViewById(R.id.username); 
    String username = uname.getText().toString(); 

    EditText pword = (EditText)findViewById(R.id.password); 
    String password = pword.getText().toString(); 

     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
     nameValuePairs.add(new BasicNameValuePair("pseudonym_session[unique_id]", username)); 
     nameValuePairs.add(new BasicNameValuePair("pseudonym_session[password]", password)); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     // Execute HTTP Post Request 
     Log.w("CANVAS", "Execute HTTP Post Request"); 
     HttpResponse response = httpclient.execute(httppost); 

     String str = inputStreamToString(response.getEntity().getContent()).toString(); 
     Log.w("CANVAS", str); 

     ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
     String ResponseBody = httpclient.execute(httppost, responseHandler); 

     Intent intent = new Intent(getBaseContext(), DashboardActivity.class); 
     startActivity(intent); 

     if(str.toString().equalsIgnoreCase("true")) 
     { 
     Log.w("CANVAS", "TRUE"); 
     result.setText("Login successful"); 
     }else 
     { 
     Log.w("CANVAS", "FALSE"); 
     result.setText(ResponseBody); 
     } 

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

private StringBuilder inputStreamToString(InputStream is) { 
String line = ""; 
StringBuilder total = new StringBuilder(); 
// Wrap a BufferedReader around the InputStream 
BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
// Read response until the end 
try { 
    while ((line = rd.readLine()) != null) { 
    total.append(line); 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
// Return full string 
return total; 
} 

@Override 
public void onClick(View view) { 
    if(view == ok){ 
    postLoginData(); 
    } 
} 

} 
+0

Vous devrez faire en sorte que votre serveur renvoie l'URL dans la réponse de publication. – Blundell

Répondre

1

si vous définissez un gestionnaire de redirection, vous pouvez récupérer de la réponse de l'emplacement vous envoyer du serveur à. voici un extrait de code que je jouais juste avec ... (et je devrais le préciser, si vous ne définissez pas un gestionnaire de redirection, vous allez juste être redirigé vers la destination finale, qui pourrait être l'écran de connexion lui-même)

DefaultHttpClient htc = getHttpClient(); 
htc.setRedirectHandler(new RedirectHandler() { 
    @Override 
    public boolean isRedirectRequested(HttpResponse response, HttpContext context) 
    { 
    Log.d(TAG, "isRedirectRequested, response: " + response.toString()); 
    return false; 
    } 

    @Override 
    public URI getLocationURI(HttpResponse response, HttpContext context) 
     throws ProtocolException 
    { 
    Log.d(TAG, "getLocationURI, response: " + response.toString()); 
    return null; 
    } 
}); 
HttpResponse resp = null; 
StringBuilder out = new StringBuilder(); 
try 
{ 
    HttpGet get = new HttpGet(spec); 
    resp = htc.execute(get); 
    for (Header hdr : resp.getAllHeaders()) 
    Log.d(TAG, "header " + hdr.getName() + " -> " + hdr.getValue()); 
    ... 
} 
catch (Exception e) 
{ 
    Log.e(TAG, "Error connecting to " + spec, e); 
    return null; 
} 
+0

Merci pour votre contribution. Je vais enquêter et créer quelque chose de similaire. –

+0

c'est si je veux obtenir les paramètres de redirection url, doit utiliser HTTP GET MEthod? –

0

Rechercher une sous-chaîne dans l'url HttpPost