Bonjour à tous,
je repost sur les forums de macgeneration une astuce que j'ai posté sur les forums de mac4ever, juste au cas où ça intéresserait quelqu'un. J'ai bien conscience qu'il s'agit d'une bidouille que certains jugeront complexe, mais au moins, en attendant qu'Apple corrige le problème, ça me permet d'utiliser la fonction d'upload de site via FTP chez Free (je n'ai pas pu tester d'autre fournisseurs...)
Donc, suite à l'acquisition d'iLife'09, j'ai été particulièrement déçu de me rendre compte que iWeb'09 n'était pas capable d'uploader mon site sur mes pages perso Free. Cependant, je me suis dit que ça ne devait pas être un problème compliqué, dans le sens où le test qu'iWeb effectue est capable de déposer un fichier de test sur le FTP.
Après quelques investigations (à grand coup de wireshark), je me suis rendu compte que les serveurs de Free ne comprenaient tout simplement pas une des commandes envoyée par iWeb (le SITE CHMOD pour les curieux). Cette commande sert juste à modifier les droits d'accès à un fichier.
En attendant qu'Apple daigne bien vouloir corriger ce problème fort gênant, je vous propose une solution de remplacement. J'ai écris un petit script Python qui sert de proxy, et qui masque à iWeb le fait que la commande SITE CHMOD n'est pas comprise.
La première étape est de créer un fichier texte contenant ceci (attention, n'utilisez pas TextEdit, il sauvegarde du RTF par défaut je crois, utilisez plutôt Smultron par exemple, il est gratuit et bien pratique) :
(ne faite pas attention à la qualité du code, ça a été écrit à l'arrache complet )
Sauvegardez le fichier sous le nom proxy.py quelque part sur votre disque, disons, sur le bureau.
Ensuite, lancer Terminal, et entrez la commande suivante :
Ensuite, à chaque fois que vous souhaiterez utiliser iWeb pour publier un site, exécutez les commandes suivantes dans le terminal:
bien sûr, vous devrez remplacer le ftpperso.free.fr par l'adresse du ftp de votre choix.
Dans iWeb, remplissez tout comme si vous alliez utiliser votre serveur FTP, mais à la place de l'adresse du serveur, mettez tout simplement 127.0.0.1
Et voilà, tentez le test, et si ça marche, publiez
En espérant avoir pu être utile à quelqu'un
PS : les serveurs de Free sont calamiteux: ils n'autorisent pas plus de deux connexions à la fois par IP, et il m'arrive souvent de me faire jeter pendant un upload. Ce script est ultra basique, il ne gère pas bien ce genre de déconnexion ... désolé ... M'enfin, même avec Cyberduck j'ai souvent du mal à uploader mon site
je repost sur les forums de macgeneration une astuce que j'ai posté sur les forums de mac4ever, juste au cas où ça intéresserait quelqu'un. J'ai bien conscience qu'il s'agit d'une bidouille que certains jugeront complexe, mais au moins, en attendant qu'Apple corrige le problème, ça me permet d'utiliser la fonction d'upload de site via FTP chez Free (je n'ai pas pu tester d'autre fournisseurs...)
Donc, suite à l'acquisition d'iLife'09, j'ai été particulièrement déçu de me rendre compte que iWeb'09 n'était pas capable d'uploader mon site sur mes pages perso Free. Cependant, je me suis dit que ça ne devait pas être un problème compliqué, dans le sens où le test qu'iWeb effectue est capable de déposer un fichier de test sur le FTP.
Après quelques investigations (à grand coup de wireshark), je me suis rendu compte que les serveurs de Free ne comprenaient tout simplement pas une des commandes envoyée par iWeb (le SITE CHMOD pour les curieux). Cette commande sert juste à modifier les droits d'accès à un fichier.
En attendant qu'Apple daigne bien vouloir corriger ce problème fort gênant, je vous propose une solution de remplacement. J'ai écris un petit script Python qui sert de proxy, et qui masque à iWeb le fait que la commande SITE CHMOD n'est pas comprise.
La première étape est de créer un fichier texte contenant ceci (attention, n'utilisez pas TextEdit, il sauvegarde du RTF par défaut je crois, utilisez plutôt Smultron par exemple, il est gratuit et bien pratique) :
Bloc de code:
#!/usr/local/bin/python
import threading
import socket
import select
import sys
class Redirect(threading.Thread):
def setSocket(self, socket1, socket2, isCommand):
self.socket1 = socket1
self.socket2 = socket2
self.isCommand = isCommand
def run(self):
overwriteNext = False
while 1:
l = [self.socket1, self.socket2]
ready_read, ready_write, ready_err = select.select(l, [], [])
if len(ready_err):
self.socket1.close()
self.socket2.close()
return
for s in ready_read:
if s.fileno() == self.socket1.fileno():
t = self.socket2
else:
t = self.socket1
msg = s.recv(8192)
if not msg:
self.socket1.close()
self.socket2.close()
return
if self.isCommand:
if msg.startswith("227 "):
pOpen = msg.find("(")
pClose = msg.find(")")
IP = msg[pOpen+1:pClose].split(",")
dataSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
to = ("%d.%d.%d.%d" % (int(IP[0]), int(IP[1]), int(IP[2]), int(IP[3])), int(IP[4]) * 256 + int(IP[5]))
dataSocket.connect(to)
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(("localhost", 0))
serversocket.listen(1)
n = serversocket.getsockname()
msg = "227 Entering Passive Mode (127,0,0,1,%d,%d).\n" % (n[1] / 256, n[1] % 256)
t.send(msg)
(s, address) = serversocket.accept()
r = Redirect()
r.setSocket(s, dataSocket, False)
r.start()
msg=""
elif msg.startswith("SITE CHMOD "):
overwriteNext = True
elif msg.startswith("STOR "):
print "Uploading %s" % msg[5:]
if msg:
if msg.startswith("500 ") and overwriteNext:
msg = "200 CHMOD command successful.\n"
overwriteNext = False
t.send(msg)
if len(sys.argv) != 2:
print "Usage : %s url\n" % sys.argv[0]
sys.exit(0)
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(("localhost", 21))
serversocket.listen(1)
print "Listening on ", serversocket.getsockname()
while 1:
(s, address) = serversocket.accept()
remotesocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
remotesocket.connect((sys.argv[1], 21))
r = Redirect()
r.setSocket(remotesocket, s, True)
r.start()
(ne faite pas attention à la qualité du code, ça a été écrit à l'arrache complet )
Sauvegardez le fichier sous le nom proxy.py quelque part sur votre disque, disons, sur le bureau.
Ensuite, lancer Terminal, et entrez la commande suivante :
Bloc de code:
chmod a+x ./Desktop/proxy.py
Ensuite, à chaque fois que vous souhaiterez utiliser iWeb pour publier un site, exécutez les commandes suivantes dans le terminal:
Bloc de code:
sudo -s
votre mot de passe administrateur
./Desktop/proxy.py ftpperso.free.fr
bien sûr, vous devrez remplacer le ftpperso.free.fr par l'adresse du ftp de votre choix.
Dans iWeb, remplissez tout comme si vous alliez utiliser votre serveur FTP, mais à la place de l'adresse du serveur, mettez tout simplement 127.0.0.1
Et voilà, tentez le test, et si ça marche, publiez
En espérant avoir pu être utile à quelqu'un
PS : les serveurs de Free sont calamiteux: ils n'autorisent pas plus de deux connexions à la fois par IP, et il m'arrive souvent de me faire jeter pendant un upload. Ce script est ultra basique, il ne gère pas bien ce genre de déconnexion ... désolé ... M'enfin, même avec Cyberduck j'ai souvent du mal à uploader mon site