Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrarea de laborator nr.3
Disciplina: Programare în rețea
Tema: Client HTTP
Chișinău 2020
Mersul lucrării:
Aplicația mea este conectată cu Facebook, de aceea aceasta începe cu interfața de logare a
utilizatorului:
La apăsarea butonului de logare se primește loginul și parola, pe lângă acestea mai sunt
înscrise în cod și id-ul aplicației prin care facebook ne oferă date și domainul pe care se face
redirect(eu folosesc “google.com”) pentru a înscrie datele în URL. Pentru început se crează un
FacebookClient și se formează URL pentru OAuth. Eu am ales să fac logarea prin WebDriver și
de aceea deschid Chrome și mă loghez prin el. După redirect primesc URL și din el extrag Acces
Token.
private void LoginButtonMouseClicked(java.awt.event.MouseEvent evt) {
String username = UsernameTextField.getText();
String password = new String(PasswordField.getPassword());
//permissions.addPermission(FacebookPermissions.PAGES_READ_USER_CONTENT)
;
FacebookClient facebookClient = new
DefaultFacebookClient(Version.VERSION_7_0);
String oauthUrl = facebookClient.getLoginDialogUrl(appID,
domain, permissions);
// Webdriver
//--------------------------------------------------------------
------------------------------------
System.setProperty("webdriver.Chrome.driver",
System.getProperty("user.dir") + "/chromedriver.exe");
driver.get(oauthUrl+ "&response_type=token");
// Fiend fields by id
WebElement usernameField = driver.findElement(By.id("email"));
WebElement passwordField = driver.findElement(By.id("pass"));
WebElement loginButton =
driver.findElement(By.id("loginbutton"));
// Send keys
usernameField.sendKeys(username);
passwordField.sendKeys(password);
loginButton.click();
// Close driver
driver.close();
//--------------------------------------------------------------
------------------------------------
Pentru verificarea URL la conținerea access tocken se formează un regex și se verifică până
când nu se validează:
String accessTockenPattern = "^(https?:\\/\\/)?(www\\.)?
google.com\\/#access_token=.*";
Pentru primirea datelor despite utilizator formez un nou FacebookClient și deja extrag datele
de bază(ID, NUME, POZA). Extrag paginile create de către utilizator și deja le înscriu într-un
ArrayList de clase AccountPages, ce conține date de bază despre pagini.
ArrayList<AccountPages> listOfPages = new ArrayList<>();
Clase AccountPages:
public class AccountPages {
private String tocken;
private String name;
private String id;
private String category;
IDLabel.setText(userID);
NameLabel.setText(user.getName());
}
void getprofileImage() {
JsonObject picture
= facebookClient.fetchObject("me/picture",
JsonObject.class, Parameter.with("redirect",
"false"));
try {
URL imageUrl = new URL(pictureUrl.asString());
PhotoLabel.setText("");
PhotoLabel.setIcon(icon);
} catch (Exception ex) {
Logger.getLogger(MainForm.class.getName()).log(Level.SEVERE,
null, ex);
}
}
listOfPages.add(new AccountPages(account.getAccessToken(),
account.getName(),
account.getId(),
account.getCategory()));
Pentru postarea mesajelor în grupuri se creează un nou thread cu o singură sarcină – postarea
mesajelor:
private void PostButtonMousePressed(java.awt.event.MouseEvent evt) {
String message = PostTextField.getText();
Concluzii:
Primirea datelor prin aplicația creată este un lucru mult mai complex decât poate arăta, în
primul rând Facebook oferă foarte puține permisiuni default pentru aplicație, chiar și dacă ești
admin sau de pe test account. Pentru restul permisiunilor trebuie să justifici prin prezentare video
cum va fi folosită permisiunea. Pentru laborator au fost necesare cunoștințe mai aprofundate
despre http, plus a fost necesară studierea librăriei restfb și API pentru Facebook. Cea mai
plăcută parte este că Java are librării ce pot simplifica lucrul cu HTTP.
Acest laborator a fost unul de repetare a așa momente ca liste, comenzi și eventuri, dar spre
sfârșit a devenit un unic ansamblu al proiectului.
Întrebări la apărarea laboratorului:
- Cum este formatat corpul unei cereri HTTP pentru o cerere HTTP de tip POST ?
Valorile sunt trimise în corpul cererii, în formatul de tipul application/x-www-form-
urlencoded.
- Cum decide un client dacă ar trebui să aibă încredere în certificatul unui server ?
Pentru o anumită încredere clientul trebuie să se asigure că Certification Authority al unui
server este transparent si are o compatibilitate semnificativă cu browsere și dispozitivele
mobile mai vechi.
- Diferența dintre protocoalele fără stare și cele cu stare. Cărui tip îi aparține HTTP ?
Protocoalele fără stare sunt tipul de protocoale de rețea în care clientul trimite o cerere
către server, iar serverul răspunde înapoi în funcție de starea curentă. Serverul nu reține
informații de sesiune sau stări despre fiecare partener în comunicarea multiplă.
Protocolul cu stare, dacă clientul trimite o solicitare către server, atunci se așteaptă la un
fel de răspuns, dacă nu primește niciun răspuns, atunci va retrimite cererea.
Protocolul HTTP face parte din protocoale fără stare.
Metode nesigure:
PUT
POST
DELETE
PATCH