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")