PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Problème de WX28 et de HTTP
Problème de WX28 et de HTTP
Débuté par Rubén Sánchez Peña, 07 jan. 2023 23:01 - 11 réponses
Membre enregistré
796 messages
Popularité : +40 (42 votes)
Posté le 07 janvier 2023 - 23:01
Bonjour, j'ai une application qui interroge le contenu de certains sites officiels pour le montrer aux utilisateurs. Jusqu'à la version 27, les fonctions et variables HTTP de WM et WD fonctionnaient correctement. Avec la version 28, apparemment parce qu'ils sont passés à OpenSSL 3.0, cela ne fonctionne plus lors de l'interrogation de nombreux serveurs car ils ne sont pas correctement mis à jour dans leur gestion SSL. En conséquence, la requête renvoie un code d'état 0 (qui n'indique pas une erreur dans la requête puisqu'elle n'aboutit pas) et le résultat n'est pas renvoyé.

Sincèrement j'avais envisagé (comme en d'autres occasions pour des problèmes jamais résolus comme le débogage, qui d'ailleurs ne fonctionne toujours pas dans WM28) d'arrêter d'utiliser WX, car il ne m'apporte que des problèmes et du temps perdu.

Je ne comprends pas qu'une mise à jour supposée meilleure puisse influencer si négativement un code qui fonctionnait, d'autant plus que depuis .NET et Java je peux accéder sans problèmes à tous les serveurs, et je ne crois pas que les deux soient obsolètes ou mal configurés pour pouvoir continuer à accéder.

En réfléchissant au problème, j'ai fini par utiliser dans mon application .NET avec WD et Java (bibliothèque OkHTTP) avec WM. C'est-à-dire qu'au lieu de simplifier les choses avec WX28, ils m'obligent à utiliser des "patchs" dans d'autres langues pour être sûr de ne pas perdre les informations que je consulte.

Le problème se produit également dans WD et WM (je suppose aussi dans WB).

Je le publie ici pour que vous puissiez vérifier si dans vos projets vous n'avez plus accès à certaines informations.

Rubén
Membre enregistré
3 342 messages
Popularité : +93 (137 votes)
Posté le 08 janvier 2023 - 10:07
Pcsoft va finir par perdre des clients à force de mal tester leurs produits.
Moi, je le regrette car le wlangage simplifie la programmation.
Je suis toujours en wm25 et j'attends depuis une version "stable" pour me mettre à jour.
Merci à toi @Ruben pour cette information.
Membre enregistré
796 messages
Popularité : +40 (42 votes)
Posté le 08 janvier 2023 - 12:35
Bonjour, Il est possible que le problème soit effectivement lié à la mise à jour d'OpenSSL vers la version 3. Mais je pense que plusieurs facteurs auraient dû être pris en compte dans ce processus :

1) Dans quelle mesure cette mise à jour affecte-t-elle le travail effectué précédemment. Je comprends que le problème vient des serveurs qui ne mettent pas à jour le SSL comme ils le devraient, mais ce n'est pas de notre faute. Suite à la mise à jour, notre travail ne fonctionne plus. Je leur ai demandé s'il y avait un moyen de corriger le blocage de l'accès comme les autres options "Ignorer..." existantes et ils ont répondu que non.

2) Compte tenu d'un changement aussi important et de son incidence sur le travail déjà effectué, ils auraient dû en faire la publicité.

3) .NET pour WD et Java pour WM n'ont pas ce problème. Le résultat est un pas en arrière pour WX. Avant même de commencer un projet, vous devez tester sa compatibilité avec le serveur, puisque logiquement le problème se situe au niveau de l'accès aux contenus web tels que les services web.

C'est fou...

Rubén
Membre enregistré
796 messages
Popularité : +40 (42 votes)
Posté le 10 janvier 2023 - 12:18
Hier, j'ai détecté que, par exemple, si vous faites un XMLOpen("https://www.boe.es/...", fromUrl), il ne retourne pas non plus les données. Toute fonction ou code qui fonctionne avec les bibliothèques HTTP échouera si le serveur n'est pas préparé à fonctionner avec OpenSSL 3.0.

Rubén
Posté le 10 janvier 2023 - 14:43
Popoy a écrit :
Pcsoft va finir par perdre des clients à force de mal tester leurs produits.
Moi, je le regrette car le wlangage simplifie la programmation.
Je suis toujours en wm25 et j'attends depuis une version "stable" pour me mettre à jour.
Merci à toi @Ruben pour cette information.


Je vous rejoins dans le sens ou le Wlanguage permet de simplifier la programmation mais sans débogueur le bénéfice temps est largement perdu!
La version 28 est sortie alors que la version 27 comporte toujours bugs et regressions.
Membre enregistré
3 342 messages
Popularité : +93 (137 votes)
Posté le 11 janvier 2023 - 08:26
@ruben, est ce qu'il t'es possible de mettre un exemple en impression pdf ou en wm25 (j'ai pas les versions supérieure) avec la bibliothèque okhttp
Sur le dépôt pcsoft.
Ça serait utile même à pcsoft.
Membre enregistré
796 messages
Popularité : +40 (42 votes)
Posté le 11 janvier 2023 - 12:45
Bonjour. Ce n'est vraiment pas un grand mystère. Il s'agit de la bibliothèque par défaut utilisée par B4A pour l'accès HTTP.

// https://raw.githubusercontent.com/square/okhttp/master/samples/guide/src/main/java/okhttp3/guide/GetExample.java
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import okio.AsyncTimeout;
import okio.Timeout;

import java.util.concurrent.TimeUnit;

PUBLIC static string OkHTTP_Download(string url) {//throws IOException {

//OkHttpClient client = new OkHttpClient();
OkHttpClient client = new OkHttpClient.Builder()
.callTimeout(30,TimeUnit.SECONDS) // default timeout for complete calls
.readTimeout(30,TimeUnit.SECONDS) // default read timeout for new connections
.writeTimeout(30,TimeUnit.SECONDS) // default write timeout for new connections
.followRedirects(True) // follow requests redirects
.followSslRedirects(True) // follow HTTP tp HTTPS redirects
.retryOnConnectionFailure(True) // retry or not when a connectivity problem is encountered
.build();

Request request = new Request.Builder()
.url(url)
.build();

try (Response response = client.newCall(request).execute()) {
RETURN response.body().string();
}
catch(EXCEPTION e)
{
RETURN "";
}
}


Tout ce que vous avez à faire est d'inclure dans la génération la librairie

com.squareup.okhttp3 okhttp 4.10.0


Rubén
Membre enregistré
3 342 messages
Popularité : +93 (137 votes)
Posté le 11 janvier 2023 - 22:57
Merci @ruben
C'est toujours un plaisir de te lire.
Membre enregistré
796 messages
Popularité : +40 (42 votes)
Posté le 12 janvier 2023 - 13:18
Bonjour, je mets à jour ici le code en utilisant le visualisateur Java de cette page. Le code précédent peut être mis à jour en utilisant le code WL.

// https://raw.githubusercontent.com/square/okhttp/master/samples/guide/src/main/java/okhttp3/guide/GetExample.java
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import okio.AsyncTimeout;
import okio.Timeout;

import java.util.concurrent.TimeUnit;

public static String OkHTTP_Download(String url) {//throws IOException {

//OkHttpClient client = new OkHttpClient();
OkHttpClient client = new OkHttpClient.Builder()
.callTimeout(30,TimeUnit.SECONDS) // default timeout for complete calls
        .readTimeout(30,TimeUnit.SECONDS) // default read timeout for new connections
        .writeTimeout(30,TimeUnit.SECONDS) // default write timeout for new connections
        .followRedirects(true) // follow requests redirects
        .followSslRedirects(true) // follow HTTP tp HTTPS redirects
        .retryOnConnectionFailure(true) // retry or not when a connectivity problem is encountered
    .build();

    Request request = new Request.Builder()
        .url(url)
        .build();

    try (Response response = client.newCall(request).execute()) {
      return response.body().string();
    }
catch(Exception e)
    {
return "";    
    }
  }


Rubén
Membre enregistré
796 messages
Popularité : +40 (42 votes)
Posté le 22 février 2023 - 20:54
Membre enregistré
796 messages
Popularité : +40 (42 votes)
Posté le 25 février 2023 - 22:02
J'ai essayé d'utiliser les nouvelles valeurs à utiliser avec le patch et j'obtiens exactement la même erreur.

En utilisant

Req.IgnoreError = 0x200 //httpIgnoreRenégociationNonSecurisée
Req.IgnoreError = 0x100 //httpIgnoreDéprécié

Le problème n'est pas résolu...

Rubén
Membre enregistré
796 messages
Popularité : +40 (42 votes)
Posté le 09 mars 2023 - 20:29
Bonjour, après avoir contacté le service technique, l'erreur d'application du nouveau patch était la mienne. En utilisant

Req.IgnoreError = httpIgnoreRedirection + ...
httpIgnoreRedirectToHTTP + ...
httpIgnoreRedirectToHTTPS + ...
httpIgnoreInvalidCertificate + ...
0x200 + ...//httpIgnoreRenégociationNonSecurisée
0x100 //httpIgnoreDéprécié


il fonctionne correctement .

Rubén