Bueno, me sente un minuto a probar lo que te dije en teoria, y salio algo como esto:
Utilizando un ClientSocket, con las propiedades:
Name : cs
Port : 80
host: dynamic.zoneedit.com
active : true
Este es el codigo para hacer la peticion:
var
Str : string;
begin
str := 'POST
http://dynamic.zoneedit.com/checkip.html HTTP/1.0'+#13#10 +
'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, */*'+#13#10 +
'Accept-Language: es'+#13#10 +
'Accept-Encoding: gzip, deflate'+#13#10 +
'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'+#13#10 +
'Proxy-Connection: Keep-Alive'+#13#10 +
''+#13#10 +
''+#13#10;
cs.Socket.SendText(str);
En el evento onRead entonces, puedes ver la propiedad receiveText para ver que te devuelve el servidor.
Str := cs.socket.ReceiveText;
Debe devolverte algo como esto:
HTTP/1.1 200 OK
Date: Wed, 07 May 2003 15:20:01 GMT
Server: Apache
Content-Length: 168
Connection: close
Content-Type: text/html
<html><head><title>Current IP Check</title></head>
<body bgcolor=white text=black>
Current IP Address: 64.32.72.149
<br>Hostname: localhost
</body></html>
Entonces, ahi solo tienes que leer la linea de CurrentIPAddress, y obtener el IP. Las posiciones son absolutas, es decir, no esperas que cambien de peticion en peticion.