Without a local copy your only option is to use getdata since I doubt that an online block explorer would let you download 10000 blocks.
How do you access the raw protocol? I'm not familiar with this.
Bitcore, A pure JavaScript Bitcoin library.
var bitcore = require('bitcore');
var Messages = bitcore.transport.Messages;
var Peer = bitcore.transport.Peer;
var Block = bitcore.Block;
var peer = new Peer('xxx.xxx.xxx.xxx');
peer.on('block',function(message){
console.log(message.block.toObject());
);
var v = [];
v.push({
type: 2,
hash: new Buffer(...)
});
var message = new Messages.GetData(v);
peer.sendMessage(message);