URL et login

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: URL et login

Message par Ar-S »

@LePiaf, je crois qu'il est sur mac os ;)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
MetalOS
Messages : 1498
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: URL et login

Message par MetalOS »

Moi aussi je suis sur Mac OS X.
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: URL et login

Message par lepiaf31 »

Sans les sockets, il faut bricoler un peu:

Code : Tout sélectionner

EnableExplicit

;Receive HTTP header and return the body size
Procedure.i receiveHttpHeader(connection.i)
  Protected header.s, received.i, *buffer, pos.i, endPos.i
  
  ;Receive HTTP Header
  *buffer = AllocateMemory(1)
  Repeat
    If NetworkClientEvent(connection) = #PB_NetworkEvent_Data
      received = ReceiveNetworkData(connection, *buffer, 1)
      header + PeekS(*buffer, 1)
    Else
      Delay(1)
    EndIf
  Until Right(header, 4) = #CRLF$+#CRLF$
  
  ;Get body length
  pos = FindString(header, "Content-Length: ", 0, #PB_String_NoCase)
  If pos
    pos + Len("Content-Length: ")
    endPos = FindString(header, #CRLF$, pos)
    ProcedureReturn Val(Mid(header, pos, endPos-pos))
  Else
    ProcedureReturn 0
  EndIf
EndProcedure

Procedure receiveHttpFileWithAuthorization(url.s, login.s, password.s)
  Protected host.s, page.s, request.s, input.s, encodedLogin.s, total.i, size.i
  Protected *buffer, bufferSize.i, received.i, connection.i
  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)
 
  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)
  
  connection = OpenNetworkConnection(host, 80)
  If connection
    SendNetworkData(connection, @request, Len(request))
    size = receiveHttpHeader(connection)
    
    total = 0
    Repeat
      If NetworkClientEvent(connection) = #PB_NetworkEvent_Data
        received = ReceiveNetworkData(connection, *buffer, bufferSize)
        total + received
        
        ;--- Fais ce que tu veux ici: ---
        Debug PeekS(*buffer, received)
        ;--------------------------------
      Else
        Delay(1)
      EndIf
    Until total >= size
    
    CloseNetworkConnection(connection)
    
  EndIf
EndProcedure


InitNetwork()
receiveHttpFileWithAuthorization("http://www.fouineweb.com/testpb/file.txt", "testpb", "MetalOS")
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: URL et login

Message par falsam »

J'ai ce code dans un coin de mes archives

Code : Tout sélectionner

ProcedureDLL.s ReadUrlFile(URL.s, OpenType.b=1, ProxyAndPort.s="") 
  ;  OpenType
  ; 1 INTERNET_OPEN_TYPE_DIRECT (Resolves all host names locally.)
  ; 0 INTERNET_OPEN_TYPE_PRECONFIG (Retrieves the proxy Or direct configuration from the registry)
  ; 4 INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  (Retrieves the proxy Or direct configuration from the registry And prevents the use of a startup Microsoft JScript Or Internet Setup (INS) file.)
  ; 3 INTERNET_OPEN_TYPE_PROXY (Passes requests To the proxy unless a proxy bypass list is supplied And the name To be resolved bypasses the proxy. In this Case, the function uses INTERNET_OPEN_TYPE_DIRECT. )
  
  isLoop.b=1 
  INET_RELOAD.l = $80000000 
  hInet.l=0 
  hURL.l=0 
  Bytes.l=0 
  Buffer.s=Space(2048) 
  RES.s="" 
  
  hInet = InternetOpen_("", OpenType, ProxyAndPort, "", 0) 
  hURL = InternetOpenUrl_(hInet, URL, #Null, 0, INET_RELOAD, 0) 
  
  Repeat 
    InternetReadFile_(hURL,@Buffer, Len(Buffer), @Bytes) 
    If Bytes = 0 
      isLoop=0 
    Else 
      RES = RES + Left(Buffer, Bytes) 
    EndIf 
  Until isLoop=0 
  
  InternetCloseHandle_(hURL) 
  InternetCloseHandle_(hInet) 
  ProcedureReturn RES 
EndProcedure 

Debug ReadUrlFile("http://testpb:MetalOS@www.fouineweb.com/testpb/file.txt")
qui donne
ok
ok file
ok
C'est ce que contient le fichier txt ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: URL et login

Message par Ar-S »

Ar-S a écrit :@LePiaf, je crois qu'il est sur mac os ;)
Ce qui signifie que MetalOS est sur Mac...
donc internetOpen_ et autres API sont gérables 8) .
On va dire que c'est le réveillon :)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
MetalOS
Messages : 1498
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: URL et login

Message par MetalOS »

Pour ma part internetOpen_ ne fonctionne pas sous Mac. Par contre le code de LePiaf fonctionne à merveille, Merci beaucoup et bonne année à vous ;-)
Répondre