API för att accessa websider i kod??

Diskussion i 'Frågor, support och diskussion' startad av redsolo, 29 okt 2009.

  1. redsolo

    redsolo Infant Droid Medlem

    Blev medlem:
    17 jun 2009
    Inlägg:
    11
    Mottagna gillanden:
    0

    MINA ENHETER

    Eftersom HtmlUnit inte funkar på Android, så undrar jag vad man kan använda för accessa websidor, fylla i formulär och hantera sessioner? Har tittat lite på HttpClient, men det känns som om man måste göra rätt mycket arbete själv till skillnad från att använda HtmlUnit.

    Bakgrunden är att jag har en applikation som måste logga in på en webbsida för att kunna hämta ut XML sida.
     
  2. sandos

    sandos Adult Droid Medlem

    Blev medlem:
    27 maj 2009
    Inlägg:
    715
    Mottagna gillanden:
    8

    MINA ENHETER

    Har inte hittat något riktigt alternativ tyvärr. Hittar du något öht så hojta gärna :)
     
  3. Fredro

    Fredro Adult Droid Medlem

    Blev medlem:
    1 jun 2009
    Inlägg:
    820
    Mottagna gillanden:
    285
    Operatör:
    Telia
    Telefon:
    Pixel 5

    MINA ENHETER

    Operatör:
    Telia
    Telefon:
    Pixel 5
    kan man inte använda post o get för att skicka svar för formulär?
     
  4. heinrisch

    heinrisch Teen Droid Medlem

    Blev medlem:
    21 jul 2009
    Inlägg:
    346
    Mottagna gillanden:
    12

    MINA ENHETER

    Detta använde jag:
    Kod:
    			URL url = new URL("Http://mobil.blocket.se/");
    			HttpURLConnection con = (HttpURLConnection) url.openConnection();
    			con.setReadTimeout(10000);
    			con.setConnectTimeout(15000);
    			// con.setRequestMethod("GET");
    
    			con.connect();
    
    			String line;
    			BufferedReader br = new BufferedReader(new InputStreamReader(con
    					.getInputStream()));
    			while ((line = br.readLine()) != null) {
    
    
    
    			}
    			br.close();
    
    		} catch (Exception e) {
    			Log.e("connection", e.toString());
    		}
    
     
  5. redsolo

    redsolo Infant Droid Medlem

    Blev medlem:
    17 jun 2009
    Inlägg:
    11
    Mottagna gillanden:
    0

    MINA ENHETER

    Absolut, men då måste man fixa cookies, sessions id, och en annan massa junk för att kunna logga in på en webbsida. Tycker att nu, 2009, så borde man slippa hålla på med råa HttpClient klasser. Jag kan ju alltid gå via Sockets, men varför???

    HtmlUnit gömmer allt junk. Det här gör man för att logga in på en site, hur enkelt som helst.
    Kod:
    HtmlForm loginForm = webClient.getPage("https://website/sign-in/").getFormByName("mainform");
    loginForm.getInputByName("loginName").setValueAttribute(username);
    loginForm.getInputByName("password").setValueAttribute(password);
    loginForm.getElementById("loginButton").click();
    
    Jag måste säga att Android gjorde ett misstag när den inte använder de XML bibliotek som är populära, såsom Xerces och Xalan. Eller iaf gjorde det omöjligt att använda dem.
     
  6. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Du skall kunna kompilera dem för Android om du absolut känner att du måste använda dem.
     
  7. sandos

    sandos Adult Droid Medlem

    Blev medlem:
    27 maj 2009
    Inlägg:
    715
    Mottagna gillanden:
    8

    MINA ENHETER

    Ja, det vore ju grymt kul om någon gjorde. Jag misstänker dock att det är svårare än man tror pga att de underliggande xml-biblioteken och framförallt javascript-stöder använder reflection i java vilket inte stöds fullt ut vad jag förstår.
     
  8. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    För rätt länge sedan kommenterade jag en buggrapport om avsaknad av xpath:
    http://code.google.com/p/android/issues/detail?id=515

    I den tråden skrev då någon att han kompilerat dom4j och jaxen för Android.

    Däremot är det ju helt rätt att reflection inte funkar så Xerces och Xalan blir svårare.
     
  9. redsolo

    redsolo Infant Droid Medlem

    Blev medlem:
    17 jun 2009
    Inlägg:
    11
    Mottagna gillanden:
    0

    MINA ENHETER

    Nu så här efteråt så kan jag förklara hur jag löste mitt problem. Jag använde Apache Http Components istället som ligger med i Android SDKt. Visserligen är det inte lika smidigt som HtmlUnit, MEN att gå ifrån en 8Mb till 240kb APK gjorde att valet (!) är mycket enklare.

    http://developer.android.com/reference/org/apache/http/package-summary.html

    Nedanstående är ett excerpt ur min kod för att kunna logga in på en sajt mha cookies och så. Mkt mer hantering äv HTMLUnit men fortfarande enklare är ren socketsprogrammering.
    Kod:
    HttpParams httpParams = new BasicHttpParams();
    httpParams.setParameter("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14 (.NET CLR 3.5.30729)");
    HttpClientParams.setRedirecting(httpParams, false);
    HttpClient httpClient = new DefaultHttpClient(httpParams );
    BasicCookieStore  cookieStore = new BasicCookieStore();
    BasicHttpContext context = new BasicHttpContext();
    context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
    
    HttpGet getReq = new HttpGet("https://server.com/login");
    HttpResponse response = httpClient.execute(getReq, context);
    response.getEntity().consumeContent();