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:

Code : Tout sélectionner

http://loginname:password@MonSiteInternet/Data/Fichier.txt
Seulement quand je test dans safari sur Mac l'url voici ce que j'obtient.

Image

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

Code : Tout sélectionner

wget http://testpb:MetalOS@www.fouineweb.com/testpb/file.txt
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.