Bonjour,
Au cours d'un développement, je dois récupérer des données via une API externe. Pour cela, j'utilise HttpClient (v4.0) d'Apache. La connexion a cette API nécessite de s'authentifier, ce que je fais.
Je dois réaliser plusieurs appels sur cette API. Systématiquement, je rencontre une erreur non pas au début mais après le douzième appel disant :
Directement, j'ai pensé à une limitation au niveau de son utilisation mais ce n'est pas le cas. En revanche, dans cette recherche et en regardant dans les logs de requêtes du serveur hébergeant l'API, on a pu voir ceci :INFO 14-09 13:27:19,377 - Client - Connexion à [https://mon-api/v2] ...
INFO 14-09 13:27:19,396 - Client - RequestLine > POST /v2/ HTTP/1.1
INFO 14-09 13:27:19,717 - Client - RequestLine > POST /v2/ HTTP/1.1
INFO 14-09 13:27:20,982 - I/O exception (org.apache.http.NoHttpResponseException) caught when processing request: The target server failed to respond
INFO 14-09 13:27:20,983 - Retrying request
INFO 14-09 13:27:22,083 - I/O exception (org.apache.http.NoHttpResponseException) caught when processing request: The target server failed to respond
INFO 14-09 13:27:22,084 - Retrying request
ERROR 14-09 13:27:23,327 - Client - Un erreur interdit l'exécution de cette étape:
Impossible de retourner un résultat depuis l'url [https://mon-api/v2]
The target server failed to respond
Dans certains cas, l'authentification se fait bien (ligne 1, 4, etc.), dans d'autres, je ne suis pas authentifié (il manque l'utilisateur).80.80.80.08 - api_prod [14/Sep/2009:11:38:47 +0200] "POST /v2/ HTTP/1.1" 200 2759 "-" "PlugTest"
80.80.80.08 - - [14/Sep/2009:11:38:48 +0200] "POST /v2/ HTTP/1.1" 401 185 "-" "PlugTest"
80.80.80.08 - - [14/Sep/2009:11:38:54 +0200] "POST /v2/ HTTP/1.1" 401 185 "-" "PlugTest"
80.80.80.08 - api_prod [14/Sep/2009:11:38:58 +0200] "POST /v2/ HTTP/1.1" 200 227 "-" "PlugTest"
80.80.80.08 - - [14/Sep/2009:11:39:02 +0200] "POST /v2/ HTTP/1.1" 401 185 "-" "PlugTest"
80.80.80.08 - - [14/Sep/2009:11:39:06 +0200] "POST /v2/ HTTP/1.1" 401 185 "-" "PlugTest"
80.80.80.08 - api_prod [14/Sep/2009:11:39:06 +0200] "POST /v2/ HTTP/1.1" 200 227 "-" "PlugTest"
80.80.80.08 - - [14/Sep/2009:11:39:10 +0200] "POST /v2/ HTTP/1.1" 401 185 "-" "PlugTest"
80.80.80.08 - api_prod [14/Sep/2009:11:39:14 +0200] "POST /v2/ HTTP/1.1" 200 874 "-" "PlugTest"
80.80.80.08 - api_prod [14/Sep/2009:11:39:22 +0200] "POST /v2/ HTTP/1.1" 200 51267 "-" "PlugTest"
80.80.80.08 - - [14/Sep/2009:11:39:26 +0200] "POST /v2/ HTTP/1.1" 401 185 "-" "PlugTest"
80.80.80.08 - - [14/Sep/2009:11:39:30 +0200] "POST /v2/ HTTP/1.1" 401 185 "-" "PlugTest"
80.80.80.08 - - [14/Sep/2009:11:39:34 +0200] "POST /v2/ HTTP/1.1" 401 185 "-" "PlugTest"
80.80.80.08 - api_prod [14/Sep/2009:11:39:35 +0200] "POST /v2/ HTTP/1.1" 200 227 "-" "PlugTest"
Au niveau de mon code, c'est pourtant une authenfication tout ce qu'il y a de plus bateau :
Je me demande donc si quelqu'un aurait une idée de pourquoi HttpClient n'envoie pas les infos d'authentification dans certains cas histoire de me donner des pistes pour me débloquer.
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
32
33
34 public void processRow () { DefaultHttpClient _client = new DefaultHttpClient(); String url = 'https://mon-api/v2'; URI uri = new URI(url); // Basic authentication CredentialsProvider credsProvider = new BasicCredentialsProvider(); Credentials creditentials = new UsernamePasswordCredentials("user", "pass"); AuthScope authscope = new AuthScope(uri.getHost(), uri.getPort()); credsProvider.setCredentials(authscope, creditentials); _client.setCredentialsProvider(credsProvider); _client.addRequestInterceptor(new HttpRequestInterceptor() { @Override public void process(HttpRequest request, HttpContext context) throws HttpException, IOException { logDetailed("RequestLine > " + request.getRequestLine().toString()); } }); HttpPost post = new HttpPost(url); HttpResponse response = _client.execute(post); HttpEntity entity = response.getEntity(); /** * Traitement de la réponse * ... */ if(entity != null) entity.consumeContent(); }
Merci d'avance.![]()
Partager