IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

simuler le remplissage d'un formulaire via paramètres GET et download du pdf correspondant


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut simuler le remplissage d'un formulaire via paramètres GET et download du pdf correspondant
    Hello

    J'ouvre un nouveau sujet, toujours lié à mon appli Android, mais plus spécifique!

    Le but:


    J'ai déjà exploré avec firebug un moment, et j'ai bien trouvé quelque chose qui semblait coller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    https://www.ter.sncf.com/alsace/depliant/recherche?Line=8457&Station=&Uic=&submit_fh=Rechercher
    mais qui ne génère rien.

    Y aurait-il un pro de firebug qui pourrait faire la manip en ligne et me trouver la bonne URL pointant directement sur le pdf généré (pour ligne "mulhouse wesserling kruth", par exemple, après je peux adapter l'id de la ligne)?

    SI c'est possible, bien sûr (mais je me dis que oui)...
    SINON, il faudra que j'ouvre un browser directement dans mon appli, pour remplir le formulaire à la main et télécharger manuellement le PDF correspondant

    Un avis sur la question?
    Merci.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    C'est une requête POST effectué sur https://www.ter.sncf.com/alsace/depliant/recherche
    Avec les paramètres :
    Line:8457
    Station:
    Uic:
    submit_fh:Rechercher

    Le problème c'est que ça retourne une page web complète qu'il faut parser pour extraire le lien du pdf à télécharger ... pas évident.
    L'extraction du lien pourrait se faire en récupérant l'html de la page dans une string qui permettrait de créer un DocumentBuilder qui lui même te permettrait de faire une requête XPath pour extraire sans trop de mal le lien du pdf

    Une recherche Google avec "android html xpath" devrait te donner des exemples

    Les API sncf ne fournisse pas les infos dont tu as besoins ?
    https://data.sncf.com/api
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    formulaire en ligne:

    Citation Envoyé par grunk Voir le message
    Le problème c'est que ça retourne une page web complète qu'il faut parser pour extraire le lien du pdf à télécharger ... pas évident.
    Ben non justement, car (comme je le disais) cette URL https://www.ter.sncf.com/alsace/depl..._fh=Rechercher n'affiche pas le lien vers le PDF à télécharger, comme c'est le cas quand tu remplis vraiment le formulaire en ligne.

    API:

    Je ne sais pas, je vais creuser la question

    Mais pas d'urgence, j'ai encore des trucs à finir avant.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par steph68b Voir le message
    formulaire en ligne:

    Ben non justement, car (comme je le disais) cette URL https://www.ter.sncf.com/alsace/depl..._fh=Rechercher
    La tu fais une requête GET , donc normal que ca ne te retourne rien , puisque le serveur attend un POST
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Ok, donc ce n'est pas faisable!

    Puisque pour passer en POST il faut vraiment valider le formulaire, on ne peut pas le simuler.

    Ne reste donc que les API.

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Tu peux tout à fait simuler une requête POST avec les paramètres que tu veux.
    Tu peux trouver un exemple avec les API dispo dans android ici : http://stackoverflow.com/a/21657510/393984

    Perso je préfère HTTPClient de chez Apache qui est nettement plus simple à utiliser que cette merde de HttpURLConnection.
    HttpClient est par défaut inclus avec DefaultHttpClient , mais est désormais déprécié. Pour en profiter il faut donc intégrer la librairie apache.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Tu peux me donner un exemple (appliqué ou pas, au topic) pour le POST?
    Jamais fait ça, vois pas comment procéder et savais même pas que c'était possible!

    Pour les API, je vais creuser.

    Mais comme dit, pas urgent, je dois d'abord encore inclure ma lecture pdf (testée dans un projet java à part) dans mon appli (asyntask, etc...).

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    En reprenant l'exemple du lien cité dans mon message précédent , ca donnerait quelque chose comme ça (non testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    URL url = new URL("https://www.ter.sncf.com/alsace/depliant/recherche");
    Map<String,Object> params = new LinkedHashMap<>();
    params.put("Line", 8457);
    params.put("Station", "");
    params.put("Uic", "");
    params.put("submit_fh", "Rechercher");
     
    StringBuilder postData = new StringBuilder();
    for (Map.Entry<String,Object> param : params.entrySet()) {
    	if (postData.length() != 0) postData.append('&');
    	postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
    	postData.append('=');
    	postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
    }
    byte[] postDataBytes = postData.toString().getBytes("UTF-8");
     
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
    conn.setDoOutput(true);
    conn.getOutputStream().write(postDataBytes);
     
    String line;
    String htmlResult = "";
     
    BufferedReader reader  = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
    while ((line = reader.readLine()) != null) {
            htmlResult += line;
    }
    reader.close();
    Tu te retrouve normalement avec le contenu de la recherche dans htmlResult , où il faudra trouver le lien du pdf.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Ok, merci, je verrai ça, probablement semaine prochaine.

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Ok, ma version 2.2 faisant très bien sa màj depuis le PDF téléchargé et copié sur la SD card, la prochaine étape, c'est donc de faire le DL du PDF directement sur le site!

    J'ai donc collé ton code dans une Async, et ça fonctionne presque mais:
    (1) il faut passer en http, https faisant planter (ERREUR java.io.IOException: Unexpected response code for CONNECT: 500)
    (2) htmlResult ne contient que, 1/4 disons (voire 1/5), du code html de la page

    Une idée du pourquoi du comment?

    J'ai d'abord pensé à un débordement de taille, dans la String (bien que pas trop crédible), alors je suis passer par un stringBuilder..... mais résultat identique, au caractère près.

    Je continue de creuser, mais si tu repasses par là...


    EDIT:

    pourtant si j'affiche line, ligne par ligne, j'ai bien toute la page dans mon logcat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BufferedReader reader  = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
    			while ((line = reader.readLine()) != null) {
    			        htmlResult += line;
    			        Log.e("line :", line );
    			}
    			reader.close();
     
    Log.e("htmlResult:", htmlResult );
    Donc c'est bel et bien une histoire de taille

    EDIT 2:

    bon, je n'ai rien dit, ça semble être juste un problème d'affichage du logcat parce que si, en sortie du while, je rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.e("string inside?:"," "+htmlResult.contains("cdn.ter.sncf.com/medias/PDF/alsace"));
    j'ai bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    09-04 17:24:41.688: E/string inside?:(2383):  true

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Ok, j'ai terminé ma nouvelle fonctionnalité, ça tourne nickel!
    Je ferme le topic.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/06/2007, 16h43
  2. Réponses: 3
    Dernier message: 16/01/2006, 11h34
  3. Récupération de valeurs de Formulaire via $_POST
    Par GarGamel55 dans le forum Langage
    Réponses: 5
    Dernier message: 10/10/2005, 08h38
  4. Réponses: 32
    Dernier message: 22/09/2005, 10h40
  5. [Debutant(e)]mise à jour de mon formulaire via JSP
    Par kouadjalain dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 11/08/2004, 15h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo