公元前298年春,楚将昭雎奉楚王之命领兵十万攻打巴蜀,司马错率军迎战。半月之后,田文率领齐魏韩三国大军直扑宜阳,开始攻打被秦人夺取的韩国宜阳旧地。四十万大军一边切断了秦人救援的道路,一边围住几个小城池狂攻猛打,韩人更是奋勇杀敌,不到半月,连下数城,为攻打函谷关扫清了道路,解除了后顾之忧。
田文率三国联军在函谷关外十里扎营,对外宣称四十万大军讨伐暴秦,秦国上下为之震动,秦王以甘茂为先锋,领兵三万出关迎战。匡章采用硬碰硬的死拼战法,秦兵虽然骁勇善战,但也占不了多大便宜,双方激战几个来回,都付出了极大的伤亡,甘茂见势不妙,只得退守函谷关内,坚守不出。
联军在函谷关前摆出了上百架投石车,一连几日猛烈攻打函谷关,但丝毫不见效果。匡章一边继续攻打函谷关,一边让楚国从南边开始攻打武关。芈月担心战局有变,不得不将司马错从巴蜀调了回来。司马错留下庶长奂领兵十万应对昭雎,自己率领五万大军从巴蜀赶了回来。
司马错到了咸阳,听闻联军只在函谷关和武关攻打,河东方向却不见动静,于是向秦王建进言道:
“武关和函谷关易守难攻,武关身后有蓝田关,函谷关身后有潼关,匡章乃世之名将,如今舍易求难,恐怕意在河东!”
“将军言之有理!寡人欲派庶长领兵五万加固河东防守,将军以为如何?”秦王道。
“如此甚好!大王可派出探子前往河东方向,密切留意对方行军动向!”司马错道。
几日之后,探子回报,在安邑城中城外发现了魏军主力。安邑是魏国城邑,与河东毗邻,司马错所料不错,田文和匡章的确意在河东。田文将魏国精锐魏武卒尽数放在了安邑城内,准备用魏人攻打昔日被秦人夺取的魏国河东故地。
安邑城中魏军出动之前,匡章加大了对函谷关的攻击力度,意在疲劳对方守城将士。这一日深夜,田文拿出了他准备好的第一个杀手锏——飞鸢战车。夜深人静之时,十架飞鸢战车载着二百名士兵突然飞过函谷关第一道城墙,降落在城关内。昔日秦人从魏人手上得到函谷关后,在原来的基础上又修了一道城墙,形成了内外双墙城关。第一道城墙实际上是一条长城,沿着山体形成了一道极长的防御工事,第二道城墙主要是用来屯兵和办公用的,主要防卫还是依赖于第一道城墙。飞鸢战车降落在两堵关墙中间,大部分秦人还没反应过来的时候,十架战车有九架放下人之后又立即飞了回去。