HttpClient coincé sans aucune exception
Je voudrais développer une application qui utilise fortement le HttpClient de apache.
Sur mon premier essai, l'application a fonctionné parfaitement jusqu'à ce qu'elle s'est coincé. Il n'a pas été arrêté, il ne lance pas d'exception, il est juste assis là à ne rien faire.
J'ai fait un deuxième essai tout à l'heure et arrêté le temps et elle s'est arrêtée après approx. 24 heures de contant en cours d'exécution. En outre, j'ai remarqué que la connexion internet de mon portable sur lequel je l'avais de course a pris fin à l'exact moment où la demande s'est coincé. J'ai dû redémarrer mon adaptateur de réseau sans fil dans le but de le net de nouveau en marche.
L'application, cependant, n'est pas de retour au travail après que la connexion a été à nouveau. Et maintenant, il est coincé à nouveau.
Est-il un délai d'attente de contrôleur, je ne suis pas au courant de la HttpClient? Pourquoi ne pas mon application lever une exception lorsque la connexion est en panne?
La partie qui utilise le client se présente comme suit;
public HttpUtil(ConfigUtil config) {
this.config = config;
client = new DefaultHttpClient();
client.getParams().setParameter(HttpProtocolParams.USER_AGENT, this.config.getProperty("httputil.userAgent"));
}
public String getContentAsString(String url) throws ParseException, ClientProtocolException, IOException {
return EntityUtils.toString(
client.execute(
new HttpGet(url)).getEntity());
}
L'application à plusieurs reprises des appels httputil.getContentAsString()
sur les Url dont il a besoin.
- Peut-être que votre entité est une chaîne vide.
- Alors ma méthode serait encore de retour, la chaîne vide, ne serait-il pas? Ou de jeter une exception au moins?
- J'ai le même problème. httpEntity.consumeContent() sauve-moi. stackoverflow.com/questions/9505358/...
- avez-vous jamais résoudre ce problème?
- C'était un problème de délai d'attente. Quand j'ai ajouté un délai d'attente de la connexion, il a été résolu à l'IIRC (c'était il y a longtemps...). Ce que le problème sous-jacent de la connexion a été, je ne m'en souviens pas.
Vous devez vous connecter pour publier un commentaire.
Ce code est maintenant obsolète (get HttpParams, etc). Une meilleure façon est:
À partir de la version 4.4, les deux réponses par les utilisateurs user2393012 et Stephen C ont été dépréciés. Je ne sais pas si il y a une autre manière de faire, mais la façon dont je le fais c'est par l'utilisation d'un générateur de paradigme, HTTPClientBuilder.
Ex.
Une très similaires (en fait, il pourrait avoir été OP problème) problème à ce que l'OP mentionné arrive aussi, mais est due à la configuration d'Apache par défaut de connexions simultanées à seulement deux connexions par client. La solution à ce problème serait d'augmenter le max de connexions ou de les fermer si vous le pouvez.
Pour augmenter le max de connexions:
Pour fermer les connexions, vous pouvez utiliser un BasicHttpClientConnectionManager et faire appel à la méthode close pour
Vous n'avez pas dit que la version de HttpClient que vous utilisez, mais en supposant qu'il s'agit de la version 4, cet article de blog explique quoi faire.
J'ai donné une réponse similaire dans un autre thread (HttpClient se bloque sur socketRead0 avec succès la méthode exécutée)
Dans mon cas, j'ai été réglage de la connectionTimeout et socketTimeout sur la demande, mais pas sur la connexion de socket utilisé lors de l'établissement de la connexion SSL. En conséquence, je voudrais parfois se bloquer lors de la connexion SSL. Ci-dessous est un code qui définit tous les 3 délais d'attente à l'aide de la v4.4 (également testé dans v4.5)
J'ai tous les délais d'installation très bien, mais j'ai découvert que nous avons sur l'url qui n'http chunking mais n'envoie pas de résultats(fonctionne très bien sur chrome, mais dans http client de ce qu'il se bloque jamais, même avec le délai fixé). Heureusement, je possède le serveur et le juste retour des ordures et il ne se bloque plus. Cela semble être un bug dans que http client ne gère pas une sorte de vide chunking cas(bien que je pourrais être loin)....Je sais juste qu'il se bloque à chaque fois sur la même url avec des données vides et que l'url est l'adresse http chunking csv télécharger retour à notre client http.
Par défaut, HttpClient n'a pas de délai d'attente (qui cause le plus de problème que ça aide). Ce que vous décrivez pourrait être un problème matériel, si votre carte réseau est mort, le HttpClient va s'accrocher.
Voici les paramètres ensemble de HttpParams dans le cadre de l'constructeur de DefaultHttpClient y compris
Qui permettra de définir un délai d'attente de la connexion, donc après la temporisation, une exception sera levée.
J'ai eu le même problème, il a collé parce que je n'ai pas fermé DefaultHttpClient.
Donc, c'est faux:
Et cela est juste:
Espère que cela aide quelqu'un.