Le site https://www.ipify.org propose une API qui retourne un fichier JSON contenant l'adresse IP de votre routeur.
La procédure que je vous présente utilise deux fonctionnalité apparus depuis la version 5.31 de Purebasic : ReceiveHTTPMemory() et ParseJSON()
Le code de base pour interroger l'API est
Code : Tout sélectionner
InitNetwork()
*Buffer = ReceiveHTTPMemory("https://api.ipify.org?format=json")
If *Buffer
ParseJSON(0, PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8))
FreeMemory(*Buffer)
Debug GetJSONString(GetJSONMember(JSONValue(0), "ip"))
EndIf
Code : Tout sélectionner
Procedure GetWanIp()
Protected IP.s, Dim IP(4), n
Protected *Buffer = ReceiveHTTPMemory("https://api.ipify.org?format=json")
If *Buffer
ParseJSON(0, PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8))
FreeMemory(*Buffer)
IP = GetJSONString(GetJSONMember(JSONValue(0), "ip"))
For n = 1 To CountString(IP, ".") + 1
IP(n-1) = Val(StringField(IP, n, "."))
Next
ProcedureReturn MakeIPAddress(IP(0), IP(1), IP(2), IP(3))
Else
ProcedureReturn #False
EndIf
EndProcedure
C'est simple
Code : Tout sélectionner
Debug IPString(GetWanIp())
Code : Tout sélectionner
InitNetwork()
If OpenWindow(0, 0, 0, 180, 50, "WAN IP", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
IPAddressGadget(0, 10, 15, 160, 20)
SetGadgetState(0, GetWanIp())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf