汉三年六月,韩信与张耳已平定赵国的反抗余波,南下至河内修武,接应刘邦。
七月,刘邦令御史大夫周苛、枞公、魏豹等人守荥阳,离开荥阳北渡黄河,来到修武,命令张耳镇守赵国,拜韩信为相国,韩信请封张耳为赵王,刘邦同意。
刘邦调集原属韩信与张耳的军队,打算回到荥阳支援前线作战。
此时项羽以荥阳发起猛烈进攻,周苛等人死守荥阳,八月,周苛以魏豹是反复无常之人,难与一起守城,于是杀了魏豹,周苛不能抵挡项羽的进攻,当月荥阳被攻陷,周苛宁死不降楚,被项羽所杀,韩王信被项羽俘虏。
刘邦欲回到荥阳与项羽交战,郑忠劝谏刘邦,避开项羽的锋芒,驻扎在河内小修武,不与项羽交战,刘邦采纳。
此时,灌婴与靳歙在鲁县打败了项冠,得知荥阳已失,靳歙南下攻打楚国腹地以牵制项羽,灌婴率骑兵返回前线增援,在燕县打败楚将王武,又在白马津打败楚将桓婴,过白马津渡黄河,到达河内与刘邦会合,护送汉王刘邦南渡黄河回到洛阳,此时项羽又攻破了成皋,到达洛阳附近的巩县,双方在巩县交战,楚军大败,不能继续西进。
刘邦在巩县遏制了楚军的攻势后,乘胜追击,意图夺回成皋,楚军坚持皋险要,汉军攻之不下,刘邦打算放弃进攻成皋,退守巩县与洛阳。
谋士郦食其劝阻刘邦,不要退却,并向刘邦说明敖仓的重要性,放弃成皋与荥阳就意味着放弃敖仓。
此时楚军后方受到靳歙的牵制,不能全力攻打敖仓,劝刘邦务必加紧进攻成皋,收复荥阳,坚守敖仓。
并自请出使齐,劝说齐王田广降汉。
刘邦非常赞同郦食其的建议,让他出使齐国,同时派遣灌婴往邯郸调回一部分韩信镇守赵地之军回到前线,坚守敖仓,并以灌婴接任周苛的御史大夫之职。
郦食其不辱使命,以三寸之舌成功劝说齐王归降。齐王同意归降于汉,撤去历城的守军,示无反意,并与郦食其纵酒庆祝。靳歙在鲁县打败项冠后,攻打楚国的腹地,此时攻克了缯县、郯县、下邳、蕲县、竹邑,几乎包围彭城。
如果不出意外,平定了楚国后方的靳歙再从东面进攻,加上彭越的配合,攻打项羽的背后,据守荥阳与成皋的项羽必将被汉军包抄,夺回荥阳与成皋指日可待。
但此时发生了一件令刘邦意想不到的事:韩信从灌婴口中得知刘邦已失荥阳与成皋,洛阳危急,并且齐国已被郦食其说降,韩信为了自己当齐王,在蒯通的蛊惑下,擅自攻打齐国撤去防守的历城,齐王大怒,以为是郦食其出卖了他,将郦食其烹杀,急忙派齐军再次防守历城,韩信不能攻下。
刘邦得知韩信攻打齐国,齐国叛汉,被迫抽调汉军主力以武力平定齐国,派灌婴、曹参、傅宽、蔡寅、陈涓、冷耳、柴武、王周等汉将赴齐助韩信攻打齐国。
这样一来,失去荥阳与成皋的不利局面雪上加霜,攻打楚国后方的靳歙也不得不放弃进攻,回到巩县抵挡项羽。
齐王不得已向宿敌楚国求援,项羽为了壮大自己考虑,也派龙且率20万楚军支援齐国。
项羽占据成皋天险,与汉军在巩县对峙,如果汉军再失巩县,洛阳也将不保。
所幸敖仓还在汉军的掌控下,刘邦派人坚守巩县的同时,命令周勃、程黑、郭蒙等坚守敖仓,刘邦自己则驻军河内小修武,指挥全局,依黄河北岸驻守,封锁黄河渡口,以阻止楚军攻入河内平原,为了重新取得战略上的优势,汉军必须夺回成皋。
但汉军的主力都用于攻打齐国了,兵力不够,为了补充兵源,调集一切可以团结的力量,刘邦派使者发往燕国,请求援助,燕王臧荼派温疥与昭涉掉尾率燕军助汉。
彭越在梁地,可以对项羽的后方发起进攻,牵制项羽,使项羽不能首尾相顾。
刘邦又命令刘贾与卢绾率领二万人渡过白马津,与活跃于楚军后方的彭越军配合,烧掉楚军的粮草。
在燕县以西打败楚军,攻占睢阳等17座城池,项羽亲自攻打彭越与刘贾,留大司马曹咎守成皋,临行前嘱部将曹咎谨守成皋,遇汉军挑战,切勿应战,只须阻止其东进即可。
汉四年冬十月,刘邦乘项羽东去兵力薄弱之机,反攻成皋。
初时,成皋楚军坚守不战。刘邦数次遣人到阵前辱骂,终于激怒曹咎,率部出击。
汉军乘楚军半渡汜水之时,全力反击,斩杀了曹咎,再次夺回成皋,并俘虏了前塞王司马欣与翟王董翳。
乘胜进至广武,并包围楚将钟离昧于荥阳以东。
项羽急忙从睢阳回救,汉军鉴于兵力不足,暂时无力彻底消灭楚军,于是见好就收,据险坚守。
此时灌婴、曹参等赶赴齐国助韩信攻破了历城、临淄,齐王田广逃到高密。
项羽所派增援齐国的二十万楚军也被汉军消灭,楚将龙且被汉军阵斩,齐国全境也被汉军平定。
汉四年二月,韩信自立为齐王。此时,彭越数反梁地,绝楚粮食,项羽患之。