If there is POST data in some test step zabbix will use POST method for further steps even if they do not.
This is caused by not resetting the curl handle and once CURLOPT_POSTFIELDS is set curl seems to set CURLOPT_POST to 1.
Issue can be fixed by adding following to the while loop in process_httptest function: src/zabbix_server/httppoller/httptest.c:
curl_easy_setopt(easyhandle, CURLOPT_POST, 0);
This will default libcurl to using GET and only use POST where intended. I suppose this could also be added as else for: if(httpstep.posts != 0)