从中原到秦朝关中,可以从北部关口函谷关进入,也能从南部关口武关进入。刘邦军最初打算重走两年前周文军的进军路线,由陈留、开封、荥阳、洛阳、渑池方向,攻取函谷关进入关中。在昌邑与彭越分手后,刘邦率军向西开拔,在经过陈留高阳时,将郦食其和他的弟弟郦商收入麾下。
郦食其是陈留县高阳乡(在今河南杞县)人,家境贫寒,好读书,机警有辩才,蛰居乡间,郁郁不得志。五十好几的人,无正当职业,周围人看他可怜,让他做里门的门监,就是门卫。虽然处境不堪,可郦食其却狷介狂放,看不起县里乡中的大户人家、强人豪杰。他伶牙俐齿,尖酸刻薄,能把死人说活、活人说死,三寸不烂之舌,令人印象深刻。
刘邦军抵达陈留县境内,部下一名骑士正好是郦食其同乡同里的少年,受命回乡打前站。食其见到骑士,说:“吾闻沛公慢而易人,多大略,此真吾所愿从游,莫为我先”。沛公虽待人轻慢无礼,但有雄才大略,我愿意追随他,只是无人引荐。骑士有些为难,告诉食其,沛公不喜欢儒生,曾经有客人戴儒者的高帽来见沛公,沛公当即取下客人的帽子,在里面撒了泡尿,和人谈话,动辄破口大骂。先生千万不要以儒生的形象礼节见沛公。骑士回去后,将郦食其的事情告诉了刘邦。
刘邦下榻高阳乡的接待传所,记起部下骑士的话,有意见见这位毛遂自荐的高阳狂生,派人召郦食其到传所来。郦食其来到传所,入室谒见,刘邦坐在木凳上,正由两位年轻女子伺候着洗脚。古时候,下客见上主,下客当屈膝下跪行大礼,上主对下客,欠身拱手作揖则可。郦食其见了刘邦,拱手不拜,他高声质问刘邦:“足下助秦攻诸侯乎,且率领诸侯破秦乎?”刘邦火冒三丈,破口骂道:“臭儒生!天下不堪秦朝苛政,诸侯各国联合攻秦,哪来的助秦攻诸侯”。食其答道:“足下想聚集天下豪杰,兴义兵诛暴秦,岂能傲慢对待长者呢”。听了郦食其这句话,刘邦马上停止洗脚,起身穿上衣服,请郦食其入客厅坐上席,自己在下席相陪,施礼道歉。刘邦弄来酒菜,两人把酒言欢。刘邦向食其请教部队如何夺取关中,食其说到,“足下起纠合之众,收散乱之兵,不满万人,欲以径入强秦,此所谓探虎口者也”。刘邦实力不够,不宜直接攻取强秦。他建议刘邦,“陈留地处交通要道,四通八达,城中粮食储备丰富,且陈留县令是臣下的朋友,请派臣下劝降县令,县令肯降,大好事;县令不肯降,足下举兵进攻,臣为内应,陈留可下。”刘邦接受郦食其的建议,派遣郦食其进入陈留,自己统领军队紧随其后,里应外合,一举攻克陈留县城。
郦食其虽蛰伏乡间,可他对刘邦研究得比较透彻,才能让刘邦接受他的建议,攻下陈留县。刘邦虽然初见郦食其时,态度傲慢,一旦意识到自己做得不对,及时调整态度,并诚心请教,愉快接受郦食其的建议。刘邦估计也没有想到,还有意外收获。郦食其又跟刘邦说起他的弟弟郦商。当时郦商召集四千青年人,刘邦命郦商为将,统领陈留召集的兵,跟从自己作战。
三月,占领陈留的刘邦军向西进攻击开封(今河南开封西南)。由于秦军顽强抵抗,未攻下。刘邦军离开开封,北上进入东郡,在白马津与秦将杨熊交战,然后一路追击至曲遇(今河南中牟)大败杨熊军。杨熊退守荥阳,被秦政府问罪处死。
四月,因荥阳坚固难以攻克,刘邦军南下进入颍川郡,与在当地活动的张良和韩王韩成会师。二世二年正月,刘邦与张良在留县初次相会并第一次合作,当年六月,两人一块参加了薛县会议,张良在会上说服项梁,立故韩国公子韩成为韩王,自己出任韩国申徒,与韩成一道领兵到韩国旧地颍川一带活动。和刘邦分手后,张良与韩成在颍川一带致力于恢复韩国故地,不过,他们的活动并不顺利,围绕城池争夺,与秦军的战事屡有反复,始终没有打开局面。颍川会师,开启了两人的第二次合作。韩成、张良与刘邦军会师以后,军威大振,一举攻下颍川郡治阳翟(今河南禹州),对顽强抵抗的秦军,实行了屠城报复,还因为张良的帮助,攻下了故韩国的领地。
当月,赵国将领司马卬统领一支赵国军队由上党郡南下,突入河内郡西部,抵达黄河孟津北岸,大有渡过黄河、进入三川郡由函谷关进入关中的动向。刘邦察觉到了司马卬的意图,领军由颍川北上,攻克平阴,封锁了黄河渡口,迫使司马卬放弃了渡河入关的打算。然后,刘邦领军南下攻击三川郡郡治洛阳,在洛阳东与秦军交战失利。连续的失利迫使刘邦大军放弃最初由洛阳直接西去,经新安、渑池一线,夺取函谷关进入关中的想法,及时调整行军路线,迂回南下,由武关进入关中。
赵将司马卬的这次军事行动令章邯深感后方不稳,刘邦为什么要阻止司马卬渡河入关?是害怕司马卬抢功吗?刘邦自西进以来,一路征战并不顺利,从函谷关进入关中需要攻克的重镇开封、荥阳和洛阳全都未攻下,他还有能力和心思阻止他人抢先进入关中?故应无抢功之说,就是一次正常的军事行动。当然,连续的失利也让刘邦认清从函谷关入关中的困难,及时调整战略。没想到,战略调整收到奇效,进军途中虽有波折,却屡战屡胜,一路顺利进入咸阳,成为灭秦第一人。
调整路线后,刘邦军由洛阳经轩辕道(今河南偃师东)退回颍川郡。再次进入颍川以后,刘邦让韩王成留守阳翟,自己与张良一起领兵往南阳郡方向移动,以夺取南阳西部的武关,由商洛道攻入关中。
秦二世三年六月,刘邦军南下攻入南阳。在颍川和南阳交界的犨县(今河南平顶山西南)东,刘邦军击败由秦南阳郡守齮统领的秦军。郡守率军逃入南阳郡治宛城(今河南南阳),据宛城坚守。刘邦急于西进入关,无意停留攻坚,打算绕过宛城,直接向武关方向突进。张良觉得不妥,劝刘邦说:“沛公虽欲急入关,然而,秦军兵力尚众,前后据险而守。如果不攻占宛城直接西去,遇强敌阻击时,宛城秦军再从后面追击,腹背受敌,非常危险。不如突然返回偷袭宛城。”刘邦接受了张良的建议,领军连夜改道折回,偃旗息鼓,清晨突然出现在宛城城下,里外三重将宛城团团围住,准备大举攻城。
刘邦军的突然返回令宛城军民措手不及,非常慌乱,南阳守齮也准备自杀,他的手下舍人陈恢说:“现在自杀早了点”,陈恢建议让他出城面见刘邦,劝说刘邦接受郡守投降。陈恢翻城而出,见到刘邦说:“臣下听说将军身受怀王之约,先入咸阳者王关中。如今,将军停留在此,围攻宛城。宛城及南阳诸县,共有数十座城池。如果南阳军民以为投降必死,就会齐心协力坚守死战,将军就需要连日攻城,士兵伤亡必多。将军若绕道西去,宛城守军必定紧跟尾随。将军前有城池守军,后有追击骚扰,必不能顺利西进,最终空负怀王之约。为足下计,不如盟誓约降,封赏南阳郡守,让他继续驻守南阳,然后整编宛城秦军,统领他们一道西向攻取关中。南阳境内其它各县军民,闻讯后也会争开城门迎接将军,将军就能顺利进入关中。”刘邦接受了陈恢的建议。
七月,南阳郡守开城投降,刘邦入城,接受政权,收编军队,封南阳郡守齮为殷侯,命他继续担任南阳郡守,封陈恢食邑千户,然后统领楚军旧部和新编的秦军一道西进。
在此之前,反秦军和秦军都采用严峻的手段对付对方,多次发生屠城,未出现秦军投降的先例。未曾想,同在秦二世三年七月,刘邦接受南阳郡守投降,项羽接受章邯投降。秦军开始大规模投降,说明敌我双方实力正在反转。不过,这两次投降最终的效果差别较大。刘邦收编了秦军,进一步壮大了他的队伍,南阳境内诸县也纷纷开城投降,加快了进军关中的步伐,而项羽坑杀二十万秦军,激起了关中老百姓对项羽军和章邯等人的深深仇恨。
刘邦率军从宛城出发,继续西进,果然如同陈恢所言,南阳境内诸县,纷纷开城投降。刘邦军西进至丹水县(今河南淅川),秦军将领高武侯鰓、襄侯王陵投降。回攻胡阳(今唐河胡阳镇),遇到番君吴芮属下的部将梅,两人一块率军攻打析县(今内乡县)和郦县(今西峡县),两地的秦军都投降了。刘邦命令部队所过一律不得掳掠施暴,明令禁止报复和掳掠秦人,秦国人民欢喜,民心开始瓦解。八月,刘邦率领数万大军进下武关并屠城。