After having no success sending GET requests to HTTP servers I finally decided to set up my own tcp server by directing a port on my router to my PC and setting up a simple tcpserver listener in cygwin like this:
~ > tcpserver -t1000 -v -Bare_we_receiving 0 9876 bash -c "sleep 1000" tcpserver: status: 0/40
Then I sent the following commands to the modem
AT+CGATT? AT+CGDCONT=1,"IP","epc.tmobile.com" AT+CGPCO=0,"None","",1 AT+CGACT=1,1 AT+SDATACONF=1,"TCP","MY_ROUTER_ADDRESS",9876 AT+SDATARXMD=1,1,0 AT+SDATASTART=1,1
For some reason the MY_ROUTER_ADDRESS had to be the text host name instead of the IP address, which was something like c-blah-blah.comcast.net for me as per my router.
Immediately I saw a connection appear in the tcpserver log:
tcpserver: status: 1/40 tcpserver: pid 5232 from 126.96.36.199 tcpserver: ok 5232 :::ffff:192.168.1.111:9876 :::ffff:188.8.131.52::50107 tcpserver: end 5232 status 256 tcpserver: status: 0/40
And then some data was received on the GPRS modem side:
> +STCPD:1 >
Which I read back promptly:
AT+SDATASTATUS=1 > +SOCKSTATUS: 1,1,0102,54,0,16 > > OK > AT+SDATAREAD=1 > +SSTR:1,are_we_receiving > > OK >
And it exactly matched the banner text. So atleast I can establish TCP connections. The AT command interface though is a real pain.