AJAX - Lire un fichier en dehors du domaine
Comme précédemment indiqué, les applications AJAX ne peuvent pas accèder aux fichiers en dehors du domaine Internet de la page appelante (il est toutefois à noter que cette limitation ne semble pas toucher Microsoft Internet Explorer). La méthode préconisée pour dépasser cette limite, quelque soit le navigateur Web utilisé, est de passer par un "Cross-Domain Proxy".
Cross-Domain Proxy
Un "cross-domain proxy" n'est rien de plus qu'une application hébergée dans le domaine , qui va télécharger le fichier extérieur souhaité et le renvoyer vers l'application AJAX. Cette technique est notamment utilisée par NetVibes. En ouvrant NetVibes avec l'extension de Firefox Firebug, on constate que les fils RSS de la page sont appelés à travers une URL du type : http://www.netvibes.com/xmlProxy.php?url=http%3A//swww.acme.com/rss.xml
L'application PHP xmlProxy.php se contente de récupérer le fichier XML et de la transmettre au navigateur Web. Il ne traite pas d'informations avant expédition. Celà permet de ne pas surcharger le serveur en laissant cette tâche au poste client.
Lotus Domino Cross-Domain Proxy
Pour faire la même chose avec Lotus Notes j'ai commencé par utiliser la méthode "ALAX" présentée dans l'article "La recherche d'informations sur l'Internet depuis un client Lotus Notes". Malheureusement il semble que la propriété responseText gère mal, voire pas du tout, les charset autres que UTF-8. Les principales sources d'informations françaises étant codées en ISO-8859-1 je ne pouvais utiliser cette méthode.
J'ai donc décidé d'en profiter pour développer un agent Lotus Notes en Java.
L'agent doit récupérer l'URL cible en argument et renvoyer le contenu de cette URL.

Le code source de l'agent est :
Intégration dans l'aggrégateur RSS
On peut très facilement intégrer cette fonctionnalité dans l'aggrégateur RSS précédemment présenté.

[Mise à jour] Ajout de doc.recycle() suite à la remarque de Yogi, administrateur du sombre blog DarkBlog à consulter sans hésitation.
Cross-Domain Proxy
Un "cross-domain proxy" n'est rien de plus qu'une application hébergée dans le domaine , qui va télécharger le fichier extérieur souhaité et le renvoyer vers l'application AJAX. Cette technique est notamment utilisée par NetVibes. En ouvrant NetVibes avec l'extension de Firefox Firebug, on constate que les fils RSS de la page sont appelés à travers une URL du type : http://www.netvibes.com/xmlProxy.php?url=http%3A//swww.acme.com/rss.xml
L'application PHP xmlProxy.php se contente de récupérer le fichier XML et de la transmettre au navigateur Web. Il ne traite pas d'informations avant expédition. Celà permet de ne pas surcharger le serveur en laissant cette tâche au poste client.
Lotus Domino Cross-Domain Proxy
Pour faire la même chose avec Lotus Notes j'ai commencé par utiliser la méthode "ALAX" présentée dans l'article "La recherche d'informations sur l'Internet depuis un client Lotus Notes". Malheureusement il semble que la propriété responseText gère mal, voire pas du tout, les charset autres que UTF-8. Les principales sources d'informations françaises étant codées en ISO-8859-1 je ne pouvais utiliser cette méthode.
J'ai donc décidé d'en profiter pour développer un agent Lotus Notes en Java.
L'agent doit récupérer l'URL cible en argument et renvoyer le contenu de cette URL.

Le code source de l'agent est :
import lotus.domino.*;
import java.io.*;
import java.net.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// Récupération de l'URL passé en argument de l'agent
Document doc = agentContext.getDocumentContext();
String newurl = doc.getItemValueString("Path_Info_Decoded");
newurl = newurl.substring(newurl.indexOf("url=") + 4);
URL url = new URL (newurl);
// Initialisation du résultat à renvoyer
String result = "";
// Les informations seront renvoyés vers le navigateur au format XML
PrintWriter pw = getAgentOutput();
pw.println("Content-type: text/xml");
// Récupération du contenu de la page cible
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result += inputLine.toString();
}
// Envoi du résultat vers le navigateur Web
pw.println(result);
doc.recycle();
} catch(Exception e) {
e.printStackTrace();
}
}
}Pour appeler l'agent il faut utiliser un URL du type : http://serverlocal/path/base.nsf/agent?openagent&url=http%3A//sitecible/path/fichierIntégration dans l'aggrégateur RSS
On peut très facilement intégrer cette fonctionnalité dans l'aggrégateur RSS précédemment présenté.

- Etape 1 : Intégration de l'agent sur une base du domaine Web. L'agent peut être déclaré dans la base elle même ou depuis n'importe quelle autre base du domaine Internet.
- Etape 2 : Déclaration des URL d'ouverture de fil. Au lieu d'indiquer directement l'URL de la cible, on la fait précéder de l'URL de l'agent selon le format présenté. On pourra aussi prévoir un développement pour intégrer automatiquement cette syntaxe afin de simplifier la tâche de l'utilisateur.
[Mise à jour] Ajout de doc.recycle() suite à la remarque de Yogi, administrateur du sombre blog DarkBlog à consulter sans hésitation.
English version

2 Commentaires:
Merci.
Et ne pas oublier les recycle() sur les objets Domino !
Arf ! Désolé pour cette erreur. Je viens de corriger le code.
Merci.
Enregistrer un commentaire
Lien vers ce message:
Créer un lien
<< Home