Reserving space for Strings, as already pointed out, is always a good idea to limit general heap fragmentation.
I've looked through your code and does not look like you have made the classic String error of defining a String as a local variable in a function, then assigning its handle to a global String variable, then letting the function in which it is defined go out of scope. This leads to all sorts of mysterious behaviour because the referenced String may no longer be there.
Having said that, if you are doing an exercise say sending 15+ times the Get Session Information command, always print the text of the sent command to the serial monitor so you can see if any data (e.g. Session ID)has been corrupted in the mean time.
The other thing is that you are following examples such as:
void SendDefaultPostRequestCommand(String Lengte)
{
client.println(F("POST /cgi-bin/cmd.cgi HTTP/1.1"));// achter post /cgi-bin/cmd.cgi
client.println(F("Host: 192.168.1.10"));
client.println(F("User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0"));
client.println(F("Accept: application/json, text/javascript, */*; q=0.01"));
client.println(F("Accept-Language: ja,en-us;q=0.7,en;q=0.3"));
client.println(F("Accept-Encoding: gzip, deflate"));
client.println(F("Content-Type: application/x-www-form-urlencoded; charset=UTF-8"));
client.println(F("X-Requested-With: XMLHttpRequest"));
//client.println(F("Referer: http://192.168.1.10/main.php"));// main.php
// referer info not needed
client.println("Content-Length: " + Lengte);
//client.println(F("Origin: http://192.168.1.10"));
}
Alot of it is probably ignored and harmless, but it would be cleaner to strip it down to the minimum necesary. The specification for http 1.1 is here: HTTP/1.1: Protocol Parameters
Also, here it looks like you have copied a standard example.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
I guess it would only matter if you had a second device on the network with the same mac address. Ideally, you would find this address from a label on your ethernet card so it would be correct and unique.
Clearly there are some things you can do remotely on the camera from a web browser which you can't do from the Arduino like streaming data. I guess though you have defined a subset of commands which you can use, so the exercise still makes sense. But the fact you can successfully issue a number of commands (up to the apparent limit of 15) is certainly a very good start.