ESP8266: GET method needs dedicated IP?

Good experts,
I have been doing some tests with Arduino UNO + ESP8266 and I have had many problems sending data to a test website using GET method (and AT commands).

Finally, watching a video about Arduino + ThingSpeak I realized that the problem was that I was using a free website without a dedicated IP. I am right? Is it possible to use GET method without dedicated IP?

If a dedicated IP is really needed, is there any hosting that gives free IP?
IMPORTANT: the Arduino UNO + ESP8266 is located on a local network, but the site I want to contact is in 000webhostapp.

Here is my code:

#include <SoftwareSerial.h>
//#include <DHT.h>;
SoftwareSerial ESP8266(2, 3); // Rx,  Tx
/* DHT SENSOR SETUP */

//#define DHTTYPE DHT11
//#define DHTPIN  A0

//DHT dht(DHTPIN, DHTTYPE,11);
float humidity=0, temp_f=0; 
long writingTimer = 17;
long startTime = 0;
long waitTime = 0;


boolean relay1_st = false;
boolean relay2_st = false;
unsigned char check_connection=0;
unsigned char times_check=0;
boolean error;

void setup()
{
  Serial.begin(9600);
  ESP8266.begin(9600);
  //dht.begin();
  startTime = millis();
  ESP8266.println("AT+RST");
  delay(2000);
  Serial.println("Connecting to Wifi");
   while(check_connection==0)
  {
    Serial.print(".");
  ESP8266.print("AT+CWJAP=\"MYWIFI\",\"MYPASSWORD\"\r\n");
  ESP8266.setTimeout(5000);
 if(ESP8266.find("WIFI CONNECTED\r\n")==1)
 {
 Serial.println("WIFI CONNECTED");
 break;
 }
 times_check++;
 if(times_check>3)
 {
  times_check=0;
   Serial.println("Trying to Reconnect..");
  }
  }
}

void loop()
{
  waitTime = millis()-startTime;   
  if (waitTime > (writingTimer*1000))
  {
    readSensors();
    writePHP();
    startTime = millis();   
  }
}

void readSensors(void)
{
  temp_f = temp_f+0.5;
  humidity = humidity+0.5;
}


void writePHP(void)
{
  startConection();
  // preparacao da string GET
  String getStr = "GET /update.php?";
  getStr +="&field1=";
  getStr += String(temp_f);
  getStr +="&field2=";
  getStr += String(humidity);
  getStr += "\r\n\r\n";
  GetResponse(getStr);
}

void startConection(void)
{
  ESP8266.flush();
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += "roborta.000webhostapp.com"; // SHOULD BE A DEDICATED IP?
  cmd += "\",80";
  ESP8266.println(cmd);
  Serial.print("Start Commands: ");
  Serial.println(cmd);

  if(ESP8266.find("Error"))
  {
    Serial.println("AT+CIPSTART error");
    return;
  }
}

String GetResponse(String getStr)
{
  String cmd = "AT+CIPSEND=";
  cmd += String(getStr.length());
  ESP8266.println(cmd);
  Serial.println(cmd);

  if(ESP8266.find(">"))
  {
    ESP8266.print(getStr);
    Serial.println(getStr);
    delay(500);
    String messageBody = "";
    while (ESP8266.available())
    {
      String line = ESP8266.readStringUntil('\n');
      if (line.length() == 1)
      {
        messageBody = ESP8266.readStringUntil('\n');
      }
    }
    Serial.print("MessageBody received: ");
    Serial.println(messageBody);
    return messageBody;
  }
  else
  {
    ESP8266.println("AT+CIPCLOSE");     
    Serial.println("AT+CIPCLOSE");
  }
}

Regards,

You're probably not using the correct term.

You need a dedicated IP to be able to provide a web hosting. What you probably mean is using one IP to serve several websites (name based virtual hosts). This works without a problem, you just have to provide the used name in an additional header line.

  String getStr = "GET /update.php?";
  getStr +="&field1=";
  getStr += String(temp_f);
  getStr +="&field2=";
  getStr += String(humidity);
  getStr += " HTTP/1.0\r\nHost: roborta.000webhostapp.com\r\n\r\n";
  GetResponse(getStr);

BTW: you should not use the String class on AVR based Arduinos (the UNO is AVR based) as it fragments the memory much too fast.