Des Alternatives à Apache HttpComponents?

Donc, je suis venu à la conclusion que Apache HttpComponents 4 est l'un des plus tendus Api que j'ai jamais rencontré. Les choses qui semblent comme ils doivent être simples prennent des centaines de lignes de code (et je suis encore pas sûr des ressources nettoyé correctement).

Plus il veut me faire faire des choses comme:

List<NameValuePair> qparams = new ArrayList<NameValuePair>();
qparams.add(new BasicNameValuePair("q", "httpclient"));
qparams.add(new BasicNameValuePair("btnG", "Google Search"));
qparams.add(new BasicNameValuePair("aq", "f"));
qparams.add(new BasicNameValuePair("oq", null));
URI uri = URIUtils.createURI("http", "www.google.com", -1, "/search", 
  URLEncodedUtils.format(qparams, "UTF-8"), null);

Qui,... non. Je sais que c'est de Java, et nous ne sommes pas dans l'ensemble de la brièveté chose, mais c'est un peu trop. Pour ne pas mentionner les pots jusqu'à 700KB.

De toute façon, assez délires, j'ai voulu voir ce genre d'expériences que les gens ont avec les autres client HTTP bibliothèques?

Ceux que je connais sont: Jetty, hotpotato, et AsyncHttpClient.

C'est pour une utilisation côté serveur, je suis surtout intéressé à la performance pour de nombreuses concurrentes obtient et les transferts de fichiers volumineux.

Toutes les recommandations?

PS je sais que le vénérable HttpClient 3.1 est toujours là, mais j'aimerais utiliser quelque chose qui est pris en charge.

Mise à jour

@oleg: c'est ce que les docs suggèrent:

    HttpClient httpclient = new DefaultHttpClient();
    try {
        HttpGet httpget = new HttpGet("http://www.apache.org/");
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream instream = entity.getContent();
            try {
                instream.read();
            } catch (IOException ex) {
                throw ex;
            } catch (RuntimeException ex) {
                httpget.abort();
                throw ex;
            } finally {
                try { instream.close(); } catch (Exception ignore) {}
            }
        }
    } finally {
        httpclient.getConnectionManager().shutdown();
    }

Je reçois toujours des erreurs lors de la consommation de l'entité de contenu lors de l'utilisation de ThreadSafeClientConnManager. Je suis sûr que c'est de ma faute, mais à ce point je n'ai pas vraiment envie d'avoir à le comprendre.

Hé, je ne veux pas dénigrer quiconque de travailler ici, mais j'ai été faire un effort de bonne foi pour utiliser HttpComponents depuis la 4.0 est sorti et il n'est tout simplement pas de travail pour moi.

  • Bien que pas parfait, avez-vous considéré comme la norme URLConnection/HTTPUrlConnection ?
  • D'avoir à appeler InputStream#close() pour libérer les ressources allouées est massivement plus complexe, n'est-ce pas?
  • J'aimerais vraiment entendre ce que vous avez découvert depuis ce détachement. Je suis dans le même bateau 🙂
  • Ajout d'un commentaire, depuis la Jetée client http lien mentionné ci-dessus est tellement vieux, ici, est le client docs. eclipse.org/jetty/documentation/current/http-client.html
  • Depuis la version 4.0, l'API a changé avec chaque point de presse pour plus de fois que je l'ai changé mes sous-vêtements
  • Je ne vous connais pas, donc je ne peux pas dire si les changements de l'API rapide, ou si je dois éviter l'odeur de votre maison 😀
  • Un peu de la colonne A, un peu à partir de la colonne B

InformationsquelleAutor Dmitri | 2011-03-24