Servicii de rețea

Request-uri HTTP

  • HTTP reprezintă protocolul de comunicație destinat transferului de informație dintre un client web și un server web. Principalele concepte cu care lucrează acest protocol sunt cererea și răspunsul.
    • Cererile formulate în protocolul HTTP se referă la informații care se pot afla stocate în diferite baze de date, în diferite formate, pe diferite calculatoare. Structura generală a unui mesaj de cerere este de forma: GET specificare_resursa HTTP/1.1
  • Clientul inițiază comunicația, trimițând un mesaj(cererea - ce conține versiunea protocolului, metoda de acces utilizată și identificatorul resursei dorite, generat ca URI) la un server.
  • Serverul HTTP returnează un răspuns ce va cuprinde, pe lângă resursa solicitată, un cod, acesta reprezentând starea serverului după interpretarea cererii, un mesaj aferent codului + diferite metainformații procesate de către client.

Cereri de tip GET

  • GET este una dintre cele mai importante metode HTTP.
  • În momentul în care navigăm în browser la o anumită adresă, se realizează o cerere de tip GET. Aceasta practic aduce date de pe server(căutarea propriu zisă este de fapt un proces care produce date, iar răspunsul la metoda GET este reprezentată de o entitate care cuprinde acele date).
  • Chiar dacă volumul de date care trebuie trimise în răspuns este mare, nu se va face o fracționare a acestuia în bucățele mai mici, pentru a facilita transferul. Volumul de date care circulă pe rețea în urma primirii răspunsului se poate micșora.
Exemplu utilizare GET
try {
        HttpClient client = new DefaultHttpClient();  
        String getURL = "http://www.google.com";
        HttpGet get = new HttpGet(getURL);
        HttpResponse rasp_get= client.execute(get);  
        HttpEntity rasp_entity = rasp_get.getEntity();  
 
        if (rasp_entity!= null) {  
                    //do something with the response
                    Log.i("GET RESPONSE",EntityUtils.toString(rasp_entity));
                }
 
} catch (Exception e) {
    e.printStackTrace();
}

Cereri de tip POST

  • Metoda POST este folosită atunci când vrem să trimitem date către server pentru a fi prelucrate de acesta. Prin intermediul acestei metode, resursei specificate în cerere i se cere să își subordoneze datele incluse în entitatea care trebuie să însoțească cerera.
Exemplu utilizare POST
      try {
        HttpClient client = new DefaultHttpClient();  
        String postURL = "http://o_adresa.com";
 
        HttpPost post = new HttpPost(postURL); 
 
            List<NameValuePair> param = new ArrayList<NameValuePair>();
 
            params.add(new BasicNameValuePair("Gina", "maslina"));
            params.add(new BasicNameValuePair("Bogdan", "camila"));
 
 
            UrlEncodedFormEntity ent = new UrlEncodedFormEntity(param, HTTP.UTF_8);
            post.setEntity(ent);
 
            HttpResponse responsePOST = client.execute(post);  
            HttpEntity rasp_entity= responsePOST.getEntity();  
            if (rasp_entity!= null) {    
                Log.i("RESPONSE",EntityUtils.toString(rasp_entity));
            }
    } catch (Exception e) {
        e.printStackTrace();
    }

Exemplu preluarea raspunsului intr-un string

    	HttpGet get = new HttpGet("http://www.google.ro");
 
    	 ResponseHandler<String> handler = new BasicResponseHandler();
    	 String response = null;
 
    	 try {  
    	response = client.execute(get,handler);
    	} 
    	catch (ClientProtocolException e) 
    			{
    				e.printStackTrace();
    			} catch (IOException e) 
    			{
    				e.printStackTrace();
    			}
    	          Log.i("RESPONSE", response);

Parsare DOM(Document Object Model)

  • Documentele html au o structura arborescenta. Primul parinte este documentul, dupa care urmeaza o ierarhie de elemente. Fiecare element poate avea o serie de atribute si o valoare.
  • Un exemplu de element este <TipElement numeAtribut=„valoareAtribut“ numeAtribut2=„valoareAtribut“ > valoareElement </TipElement>
  • Valoarea elementului si atributele pot lipsi.
  • In continuare este exemplificata o ierarhie si modul de parsare.
document-->html ->head->title
                ->body->p
                      ->p
                      ->img 
 
String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p><p>Something</p><img src="adresa.jpg"></img></body></html>";
 
Document doc = Jsoup.parse(html);  //creaza documentul
Element e=doc.child(0);  // obtinem elementul html,fiu al documentului, care contine intreaga ierarhie
Element e2=e.child(1); // obtinem cel de-al doilea fiu al html-ului, adica body
Element e3=e2.child(0); // otinem primul fiu al lui body, adica primul paragraf
syso(e3.text())   // afisam valoarea paragrafului, adica "Parsed HTML into a doc."
 
//Afisati elementele pentru a intelege mai bine ce contine fiecare
 
Pe langa deplasarea in ierarhie, putem sa obtinem direct o lista de elemente ce au un anumit atribut.
 
Elements el=doc.getElementsByAttributeValue(key, value);
Element e=el.get(0);

Exerciții

1. Implementati un calculator care trimite request-uri de tip GET la adresa http://tirgumures.ipworkshop.ro:8000/android/math_operation/ și afișează rezultatul primit.

Parametrii ce trebuie trimiși sunt:

  operatie = adunare / scădere / înmulțire / împărțire
  operator1 = un număr
  operator2 = un număr

2. Implementati un Chat Indirect. Realizati un request POST la adresa „http://tirgumures.ipworkshop.ro:8000/android/echo/“ cu parametrul „echo=_orice_string_“. In loc de „_orice_string“ puteti pune un mesaj si urmatoarea persoana care va face requestul va vedea mesajul pe care voi l-ati lasat.

3. Realizati o aplicație simplă care să realizeze un search pe google. Rezultatul primit va fi expus într-un WebView.

4. Afisați cea mai nouă imagine de pe pagina principală a site-ului 9gag.com
Pentru a putea face asta va trebui pentru început sa descărcați, html-ul care descrie structura acestei pagini, după care să îl parsați pentru a obține url-ul imaginii.

  • Una din optiunile de parsare este crearea unui DOM pentru care recomandăm folosirea bibliotecii Jsoup.(http://jsoup.org)
  • După ce ați obținut url-ul imaginii, o puteți descărca într-un bitmap, pe care îl puteți seta pe un imageView.
programare_android/curs/curs5.txt · Ultima modificare: 2013/08/05 15:36 de către stefan.alexandru
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0