I am taking similar approach as I took for TFTP for which QEMU + PXE Knife combination is working if I use qemu TFTP stack. Here are the things that are working for me.
qemu -net nic -net user -fda ./gpxe.dsk -bootp /pxelinux.0 -tftp /home/myname/for_pxe_knife/
which boots pxe-knife over tftp and
qemu -fda gpxe.dsk -net nic -net user -bootp http://10.0.0.2/gpxe/gtest.gpxe
boots gtest.gpxe which is copy of http://etherboot.org/gtest/gtest.gpxe.
But when I try and use HTTP with qemu over pxe_knife which is based on pxelinux, it does not work.
qemu -fda gpxe.dsk -net nic -net user -bootp http://10.0.0.2/pxeknife/pxelinux.0
It loads pxelinux.0 successfully, but fails in loading pxeknife/default file with error
TFTP prefix: http://10.0.0.2/ Trying to load: pxelinux.cfg/default Unable to locate configuration file Boot failed: press a key to retry, or wait for reset...
I recompiled the gpxe with following embedded script ../contrib/scripts/forpxeknife.gpxe,
#!gpxe echo "Hi there" dhcp net0 set 209:string pxelinux.cfg/default set 210:string http://10.0.0.2/pxeknife/ chain http://10.0.0.2/pxeknife/pxelinux.0 boot
and I compile with following command
make clean && make EMBEDDED_IMAGE=../contrib/scripts/forpxeknife.gpxe
I execute qemu with no extra parameters at-all.
qemu -fda gpxe.dsk
I do get my echo messages printed, but still I am getting same error.
TFTP prefix: http://10.0.0.2/ Trying to load: pxelinux.cfg/default Unable to locate configuration file Boot failed: press a key to retry, or wait for reset...
All above problems were there because of older version of PxeLinux
I switched to 3.80 and problem solved
Refer page qemupxeknifehttp to check out proper working documentation.