CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[java] Requete http très longue

[jack-sparrow]
[jack-sparrow]
Niveau 7
01 mars 2013 à 12:16:58

Bonjour,

N'ayant eu aucune réponse dans mon autre sujet, j'essaye de reformuler ma demande pour que ce soit plus clair.

J'essaye d'obtenir le code source de 3 pages différentes grace au code ci après.
Malheureusement, la seconde url est un PDF de 50Mo et la requète prend donc énormément de temps à s'exécuter.
Le but de ce topic : Essayer d'interrompre la lecture du pdf car c'est trop long et passer à l'url suivante. (donc la 3eme et dernière URL)

public class MonProjet
{
private static HttpClient httpclient = new DefaultHttpClient();

public static void main(String[] args)
{
// Cette ligne s'execute sans souci.
String code1 = Http.doget(httpclient, "http://www.siteduzero.com/");

// Ici j'essaye d'accéder à un PDF super gros. J'aimerai donc trouver un moyen d'arreter la lecture de delui-ci pour passer au site suivant.
String code2 = Http.doget(httpclient, "http://booksnow2.scholarsportal.info/ebooks/oca1/
29/lapolicedesmurse02fiauuoft/lapolicedesmurse02fi
auuoft.pdf");

// Je n'arrive jamais à cette ligne car la lecture du PDF est trop longue, j'aimerai la stopper pour pouvoir avoir le code source de ce site.
String code3 = Http.doget(httpclient, "http://9gag.com/");
}
}

Voici ma fonction doget (qui se trouve dans une classe nommée Http) :

public static String doget(HttpClient httpclient, String url)
{
httpclient.getParams().setParameter(CoreConnectio
nPNames.SO_TIMEOUT,
10000);
httpclient.getParams().setParameter(CoreConnectio
nPNames.CONNECTION_TIMEOUT,
10000);

HttpGet httpget = new HttpGet(url);
StringBuilder source = new StringBuilder();
String resa = null;

try
{
HttpResponse response = httpclient.execute(httpget);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(
)));

String line;

// Cette boucle s'éxecute pendant plusieurs minutes dans le cas où on essaye de lire le pdf
// C'est trop long, je souhaiterai la stopper si ça prend trop de temps.
while ((line = reader.readLine()) != null)
{
source.append(line+"\r\n");
}

resa = source.toString().trim();

}
catch(IOException ioe)
{
resa = "Erreur";
System.out.println("IO exception");
ioe.printStackTrace();
}
catch(Exception e)
{
resa = "Erreur";
System.out.println("Exception");
e.printStackTrace();
}

return resa;
}

Vous l'avez sûrement compris, mon but est de trouver un moyen de stopper la lecture du PDF sans détruire ni déteriorer mon httpclient. En effet, si on détruit ou déteriore ce httpclient, je ne pourrai pas avoir le code de ma dernière URL...

Cela fait 3 jours que je bloque donc je vous en supplie si vous avez une idée, n'hésitez pas ! :)

Merci d'avance et bonne soirée ! :)

_skip
_skip
Niveau 10
01 mars 2013 à 12:36:58

Hello,
Il me semble que c'est apache httpclient.

Bon déjà, si tu compte télécharger un fichier, je te conseille de travailler avec un bufferedInputStream 4k par 4k, plutôt qu'avec un reader ligne par ligne.
L'avantage c'est qu'un stream télécharge des bytes et ne fait aucune interprétation de l'encodage (conversion byte -> char). Par ailleurs si tout à coup ton fichier fait 250mo et ne contient pas de retour à la ligne, ça évite un bon gros outofmemory.

Ensuite le truc que tu peux essayer, dans ta boucle, tu calcules le temps écoulé à chaque tour, s'il dépasse tu sors de la boucle et tu appelles abort() sur httpget

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment