Page 1 sur 2
URL et login
Publié : ven. 27/déc./2013 21:39
par MetalOS
Salut les amis,
Pour un projet j'ai besoin de me connecter à un serveur pour télécharger un fichier de données. Pour me connecter à ce serveur je doit utiliser une url avec un nom d'utilisateur et un mot de passe.
Exemple d'url:
Seulement quand je test dans safari sur Mac l'url voici ce que j'obtient.
Du coup quand j'utilise cet url avec la commande ReceiveHTTPFile() pour télécharger le fichier ca ne marche pas. J'ai testé sous Linux et Windows également et j'ai le même problème. Faut il employer le login et password différemment pour accéder au fichier ?
Merci d'avance pour votre aide.
PS: je ne peut pas vous donner la vrai url car l'administrateur de ces données me l'interdit.
Re: URL et login
Publié : sam. 28/déc./2013 9:22
par doudouvs
Salut,
Protection de l'url par .htaccess
C'est normal avec safari d'avoir ce message avec Chrome aussi si mes souvenirs sont bon, avec firefox tu aura un message du style "vous êtes sur le point de vous connecter..." en gros les navigateur contrôlent que tu envoi le login/pass via l'url. avec Pb tu n'aura pas le message cela doit donc marcher.
Si tu à un Apache qui tourne tu peux crée un .htaccess pour faire le test.
Re: URL et login
Publié : sam. 28/déc./2013 15:59
par MetalOS
Non justement avec PB sa ne fonctionne pas, le fichier ne ce télécharge pas.
Re: URL et login
Publié : sam. 28/déc./2013 17:40
par doudouvs
Ah effectivement j'ai une erreur du header
Code : Tout sélectionner
InitNetwork()
Header$ = GetHTTPHeader("http://testpb:MetalOS@www.fouineweb.com/testpb/file.txt")
Repeat
Index+1
Line$ = StringField(Header$, Index, #LF$)
Debug Line$
Until Line$ = ""
Réponse du Header
Code : Tout sélectionner
HTTP/1.1 401 Authorization Required
Date: Sat, 28 Dec 2013 16:34:25 GMT
Server: Apache
WWW-Authenticate: Basic realm="Acces test PB"
Vary: Accept-Encoding
Content-Type: text/html; charset=iso-8859-1
Re: URL et login
Publié : sam. 28/déc./2013 19:32
par MetalOS
A moins d'utiliser un script php qui récupère le fichier pour le stocker sur mon serveur perso et ensuite je pourrais l'exploiter dans mon code depuis mon serveur. Mais je ne connais rien à php lol.
Re: URL et login
Publié : sam. 28/déc./2013 21:56
par doudouvs
ben utilise un wget
autrement en php
Code : Tout sélectionner
<?php
function copyfile($Source, $Destination)
{
$Fichier = fopen ($Source, "r");
$ContentFichier ='';
while (!feof($Fichier)) $ContentFichier .= fread($Fichier, 8192);
fclose ($Fichier);
$Fichier = fopen ($Destination, "w+");
if ( !fwrite($Fichier, $ContentFichier)) die('Impossible d\'écrire dans le fichier');
fclose ($Fichier);
}
copyfile('http://testpb:MetalOS@www.fouineweb.com/testpb/file.txt', '.file.txt');
?>
Si tu à la main sur ton serveur le mieux et de passer par wget avec un cron qui va bien
Re: URL et login
Publié : sam. 28/déc./2013 21:58
par falsam
Tu peux aussi utiliser les fonctionnalités ftp.
Re: URL et login
Publié : sam. 28/déc./2013 23:14
par MetalOS
Merci pour script doudouvs. Autrement c'est vrai que je n'avais pas pensé à regarder du côté des commandes ftp, mais comme c'est une adresse en http ca risque de ne pas fonctionner non ?
Re: URL et login
Publié : dim. 29/déc./2013 0:01
par doudouvs
Effectivement cela risque de ne pas marcher, si il n'y à pas de serveur ftp.
Si tu à la main sur ton serveur perso je peux te faire un bash avec le cron qui va bien
Re: URL et login
Publié : dim. 29/déc./2013 0:11
par MetalOS
Oui je veut bien merci.
Re: URL et login
Publié : dim. 29/déc./2013 0:32
par doudouvs
Fichier que tu sauvegarde sous getfileclient.sh
Code : Tout sélectionner
#!/bin/bash
dir=/repertoire
wget -O $dir/nom_de_ton_fichier_local.txt "http://testpb:MetalOS@www.fouineweb.com/testpb/file.txt"
Tu fait un "chmod +x getfileclient.sh" sur le fichier pour le rendre exécutable
Pour le cron tu rajoute dans crontab :
Exécuter un script à toutes les heures
Code : Tout sélectionner
# m h dom mon dow command
0 */1 * * * /repertoire/getfileclient.sh >/dev/null 2>&1
Re: URL et login
Publié : dim. 29/déc./2013 10:17
par MetalOS
Merci pour ton aide doudouvs mais je vient de me rendre compte que mon hébergeur ne me permet pas ce genre de manipulation.
Pas cool, je pense que seul un script php qui rapatrie le fichier chez mon hébergeur et la solution.
Re: URL et login
Publié : dim. 29/déc./2013 21:46
par lepiaf31
En PB (fait à l'arrache):
Code : Tout sélectionner
Procedure receiveHttpFileWithAuthorization(url.s, login.s, password.s)
Protected host.s, page.s, request.s, input.s, encodedLogin.s, socket.i, service.sockaddr_in
Protected *buffer, bufferSize.i, received.i, *hostent.HOSTENT, ipString.s
Dim ip.a(4)
host = GetURLPart(url, #PB_URL_Site)
page = GetURLPart(url, #PB_URL_Path)
If GetURLPart(url, #PB_URL_Parameters) <> ""
page + "?" + GetURLPart(url, #PB_URL_Parameters)
EndIf
input = login + ":" + password
encodedLogin = Space(Len(input)*2)
Base64Encoder(@input, Len(input), @encodedLogin, Len(input)*2)
encodedLogin = Trim(encodedLogin)
*hostent = gethostbyname_(host)
CopyMemory(PeekI(*hostent\h_addr_list), @ip(), 4)
ipString = Str(ip(0))+"."+Str(ip(1))+"."+Str(ip(2))+"."+Str(ip(3))
request = "GET /" + page + " HTTP/1.1" + #CRLF$
request + "Host: " + host + #CRLF$
request + "Connection: close" + #CRLF$
request + "Authorization: Basic " + encodedLogin + #CRLF$
request + #CRLF$
bufferSize = 2048
*buffer = AllocateMemory(bufferSize)
socket = SOCKET_(#AF_INET, #SOCK_STREAM, #IPPROTO_TCP)
If socket <> #INVALID_SOCKET
service\sin_addr = inet_addr_(ipString)
service\sin_family = #AF_INET
service\sin_port = htons_(80)
If connect_(socket, @service, SizeOf(sockaddr_in)) <> #SOCKET_ERROR
send_(socket, @request, Len(request), 0)
Repeat
received = recv_(socket, *buffer, bufferSize, 0)
If received > 0
;--- Fais ce que tu veux ici: ---
Debug PeekS(*buffer, received)
;--------------------------------
EndIf
Until received = 0
EndIf
closesocket_(socket)
EndIf
EndProcedure
InitNetwork()
receiveHttpFileWithAuthorization("http://www.fouineweb.com/testpb/file.txt", "testpb", "MetalOS")
Re: URL et login
Publié : dim. 29/déc./2013 23:17
par MetalOS
Je vais tester ton code et je te tiens au courant. Merci lepiaf

Re: URL et login
Publié : mar. 31/déc./2013 2:52
par MetalOS
J'ai un structure not found sur service.sockaddr_in ligne 2.