2012-04-14 11 views
0

Ich bin nicht ganz sicher, wie es funktioniert, aber was ich tun muss, ist mit JSON-RPC authentifizieren und dann eine Seite anfordern. Ich habe diesen Code, um herauszufinden, ob der Benutzername und das Passwort richtig ist, aber ich weiß nicht, wie diese Informationen zu verwenden, um eine Seite zu beantragen ..Html, auth. Cookies erhalten

List<Cookie> cook; 
    public void postData(String method, Object ... params) throws JSONException { 
     // Create a new HttpClient and Post Header 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://www.examp;e.com/json-rpc/"); 

     try { 
      // Add your data 

      String methodandp = "{id:3, method:" + method + ", params:[" + params[0].toString()+ ", " + params[1].toString() + "]}"; 

      StringEntity a = new StringEntity(methodandp); 
      httppost.setEntity(a); 
      Log.i("ClientActivity: request", httppost.getMethod().toString()); 
      Log.i("ClientActivity: request", nameValuePairs.toString()); 


      // Execute HTTP Post Request 
      HttpResponse response = httpclient.execute(httppost); 


      Header[] head = response.getAllHeaders(); 

      Log.i("ClientActivity", response.getStatusLine().toString()); 
      String responseString = EntityUtils.toString(response.getEntity()); 
      responseString = responseString.trim(); 
      JSONObject jsonResponse = new JSONObject(responseString); 
      Log.i("ClientActivity", jsonResponse.toString()); 
      String cookie = ""; 

      for(int i = 0; i < head.length; i++){ 
       Log.i("ClientActivity: response", head[i].toString()); 
       if(head[i].toString().contains("Set-Cookie")){ 
        cookie = (head[i].toString()).replace("Set-Cookie: ", ""); 
        cook = ((AbstractHttpClient) httpclient).getCookieStore().getCookies(); 
        if (cook.isEmpty()) { 
         System.out.println("None"); 
        } else { 
         for (int x = 0; x < cook.size(); x++) { 
          Log.i("ClientActivity", "-" + cook.get(x).toString()); 
         } 
        } 
        Log.i("ClientActivity: Cookie", cookie); 
       } 
      } 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
     } 
    } 

Es kommt wieder mit Erfolg und mit den richtigen Daten, sondern Ich weiß nicht, wie man es benutzt.

+1

Viele dieser Code ist nicht wirklich relevant für das Extrahieren des Cookies aus der Antwort, also sollten Sie das zuerst aufräumen. Wenn Sie nun die for-Schleife beendet haben, sollten Sie in der Regel das Cookie in der sogenannten Variablen haben (normalerweise bedeutet: eine Leerüberprüfung des Cookie-Strings durchführen). Anschließend können Sie eine GET-Anforderung erstellen, eine Kopfzeile mit diesem Cookie festlegen und die erforderliche Webseite abrufen. – Rob

+0

Okay, ich habe das getan, aber wie bekomme ich den Inhalt, den ich gerade angefordert habe? – FabianCook

+0

Können Sie versuchen, Ihre eigentliche Frage zu klären? Was genau versuchen Sie mit den Daten, die von dieser URL abgerufen werden? Versucht, auf eine andere Seite zu gelangen? – robertvoliva

Antwort

1

Das war wirklich wirklich einfach jetzt, dass ich es ansehe, sobald ich überprüft habe, dass ich authentifiziert wurde, konnte ich den gleichen HttpClient verwenden (der die Cookies hält), um andere Dateien anzufordern und Dateien mit MultipartEntity

auf den Webserver zu schieben