The Arduino core macro F() takes a string literal and forces the compiler to put it in program memory. This reduces the amount of SRAM needed as the string is not copied to a data memory buffer. Special functions are required to access the data stored in program memory. The Arduino core hides a lot of the typical usages such as:
Serial.println(F("Hello world"));
Further details of the low level access program memory access may be found in the AVR GCC libc documentation. The F() macro is defined as:
class __FlashStringHelper;
#define F(string_literal) (reinterpret_cast<const __FlashStringHelper*>(PSTR(string_literal)))
The FlashStringHelper class is used to help the compiler recognize this type of string literal when passed to Arduino functions. Below are some examples:
// String constructor with program memory string literal
String::String(const __FlashStringHelper *str);
// Print (Serial, etc) of program memory string literal
size_t Print::print(const __FlashStringHelper *);
size_t Print::println(const __FlashStringHelper *);
You should not use the Arduino core F() macro with anything other than a string literal.
client.println(getWeatherData());