端平二年,大蒙古国哈剌和林城(今蒙古国后杭爱省厄尔得尼召市)万安宫竣工,这是蒙古人第一座城市,也就成为首都。定都后窝阔台汗分派王子率兵向西域、高丽和南宋发起全面进攻。其中,分三路攻宋,王子阔端率西路军攻四川,王子阔出率中路军攻湖北,宗王口温不花率东路军攻江淮。中路军率先进攻唐州,被贬为京湖制置副使的全子才不支逃离,所幸京湖制置使赵范率军赶到击败蒙军,稳定了局势。蒙军继续进攻枣阳,就在这里,孟宗政曾让金军“士马折耗十不一存”,导致了金国的全面崩溃。蒙军初时进攻枣阳也遭到顽强抵抗,直到十月才攻下这座小城。之后中路军分两路,阔出自率军攻襄阳,太师国王塔思攻郢州(今湖北钟祥)。郢州曾是战国时期楚国国都,濒临汉水,地势非常险要,宋军有很多水军驻扎协防,城池也很高大。塔思令制造木筏,遣汶上达鲁花赤(相当于殖民地总督)刘拔都儿率死士500强攻,宋军江陵统制李复明率兵迎战将蒙军击退。但宋军战船稍有接近对岸,蒙古骑射手就如迅雷般奔出,箭如雨下,李复明战殁,宋军损失惨重。

但蒙军仍然无法攻克郢州坚城,塔思大肆劫掠一番后退兵。阔出一路进围襄阳,史载赵范用人不当,襄阳守将王旻、李伯洲等日夜宴饮,不理军政,蒙军到来则焚烧城郭仓库投降,无数积存物资尽归蒙古,赵范也因此被降职。但事实上阔出自端平二年十月便开始进攻襄阳,次年二月,窝阔台汗专门派兵增援,三月才攻克。这数月间肯定进行了非常激烈的战斗,蒙军肯定遭到重创以致需要再派援军,阔出也很可能受了重伤,所以才会在数月后无故死于军中。现存史料似乎隐瞒了这些战斗,而王旻等将虽然最终投降,但既然能在危难之际受命镇守襄阳,如果说是不务正业的庸才,也不太符合情理。攻取襄阳后,阔出军继续南下,连续攻克荆门等重镇,进逼江陵(今湖北荆沙)。十月,中路军主帅阔出王子突然薨于军中,蒙军以特穆耳岱继为统帅,继续进攻。知江陵府李复光战殁,同时西路军也攻克成都。理宗这时才后悔端平入洛的轻率,下罪己诏,宰相乔行简、郑清之也引咎辞职,又起复在端平入洛行动中抗命而被罢为虚职的史嵩之、孟珙。孟珙立即率军赴援江陵。

孟珙的兵力比敌军少得多,但他巧令部将张顺变换旗帜和服装,在江上循环往来,至夜则用火炬沿江照亮数十里。蒙军以为宋军大举来援,心怀悸怖。孟珙趁机进攻,连破24砦,夺回被掳人民二万余。中路战场形势立变,蒙军撤离。孟珙在首次与蒙军的正面交锋中便以少胜多,大获全胜,日后成长为宋军抗蒙的旗帜性人物。东路军由宗王口温不花率领,攻城进展不大,只顾大肆劫掠,后窝阔台汗以察罕代之。察罕到后立即进攻真州,蒙军首先尝试突破城上火炮和弓弩的交叉火力网,损失相当惨重,知真州丘岳趁机带兵出战,射杀蒙军主将一人。丘岳知道双方兵力十倍悬殊,不能力敌,于是在城外设下三重伏兵,待蒙军重新来攻,伏兵和城头炮火同时发起,大败蒙军。丘岳又派勇士焚烧蒙军营帐,第二天,东路军攻势收场。而真正的激战还在西路战场。阔端王子率西路军从凤州出发,进取四川,任前金军巩昌总帅汪世显为先锋,攻沔(miǎn)州(今陕西略阳)。知沔州高稼认为必须留守沔州,以牵制蒙军。四川制置使赵彦呐同意他的意见,却没有派兵增援。

最后蒙军大举围攻沔州,高稼战殁。赵彦呐急忙派兵屯守川陕交界的青野原,此时曹友闻出场了。曹友闻是宋初名将曹彬的十二世孙,生年不详,宝庆二年(1226年)进士,累官至武德大夫、左骁卫大将军、利州驻紥御前诸军都统制。曹友闻听说宋军在青野原被围,立即单骑夜入,与守将张维动员民兵奋战,竟然将蒙军击退,制置司做了一面“满身胆”的军旗给他。曹友闻又散尽家财,募集了5000忠义民兵,蒙军反复来攻,均被曹友闻击退。汪世显分兵进攻大安军(治所在兴元府),曹友闻分遣摧锋军统制王资、踏白军统制白再兴速趋鸡冠隘(今陕西宁强鸡冠山),左军统制王进据阳平关(宁强西北)。刚刚安排好,数万蒙军突然出现在阳平关。曹友闻亲率帐军、背嵬军奋力迎战,左右驰射,将蒙军击退。曹友闻对部下说:“敌军必然立即回攻鸡冠隘,应该马上救援。”果然大队蒙军攻向鸡冠隘,曹友闻采用骑兵居中、步兵张两翼的阵型,激战蒙军。关内的王资、白再兴也趁势杀出。两军血战许久,喋血十余里,最终蒙军不支退去。

曹友闻晋升眉州防御使,两个弟弟曹万(据曹氏家谱记载应该叫曹友万)、曹友谅也升为总管。宋军退保仙人关,准备迎接蒙军的新一轮攻势。端平三年九月,经过一段时间休整,阔端王子签发党项、女真、回回、吐蕃、渤海军五十余万重新来攻,欲将四川一举**平。蒙军如洪流般冲过汉中平原,进逼兴元府。赵彦呐令曹友闻率军守住大安军兴元府,以保四川入口。但曹友闻的意见和殉国的高稼一样,认为应该加强对沔州的支援,便可使蒙军不敢轻易进入四川,而汉中平原正是蒙军施展骑兵优势之处,应该主动放弃。赵彦呐可能是因为高稼败于沔州在前,而且兴元府确实也是重镇,没有接受这个意见,坚决要求据守兴元府。曹友闻无奈,只好进驻兴元府。他认为以寡敌众,必须夜出内外夹击,于是制定作战方案,让曹万、曹友谅在城头立满旗帜,以示坚守,自选精锐万余趁夜渡江,择地设伏,约定曹万先在城下与敌接战,举烽火则伏兵杀出。果然蒙军大至,曹万背城列阵,八都鲁、达海率万余人先攻。曹万率军浴血奋战,身中数创,令举烽火。

曹友闻指挥伏兵尽出,分别攻击蒙军前、中、后队,自率精兵3000疾驰至关下。曹友闻先遣保捷军统领刘虎率500敢死队冲击蒙军前阵,但没有成功。曹友闻又在路旁设伏,准备等天黑与城内部队夹击敌军。然而天不襄助,这时居然下起了大雨,“淖泞深没足”。诸将都请等雨稍停再出击,但曹友闻道:“敌人已经知道我们在此设伏,稍缓就失去战机了。”于是拥兵齐进,曹万在城内听到,半夜出兵来合,宋军殊死血战,血流20里。当时川军多以棉裘代替铁甲,因为蒙军骑射手的主要武器是轻弓,棉裘不但轻便而且防箭效果很好,但现在被雨水浸透就既不能防箭也不能防刃。第二天,蒙军以铁骑四面围定,曹友闻仰天长叹:“此殆天乎!吾有死而已。”牵来座马杀死,以示必死决心,宋军将士也无不气血激昂,怒吼着冲向敌军。最后万余宋军全部阵亡,史料没有记载杀伤敌军的数量,但相信要远远超过损失。汪世显素来景仰曹友闻,虽是手下败将,却专门盛礼祭奠,而宋廷特赠龙图阁学士、大中大夫,谥毅节,立褒忠庙。宗王宗哥穆直率偏师走当年邓艾偷渡阴平的路线,沿西路险山进军。

由于宋军不备,蒙军顺利攻破阶州,但在文州(今甘肃文县)遭到激烈抵抗。知州刘锐、通判赵汝曏率军民七千余人,坚守75天,蒙军始终无法攻克。宗哥穆直听说阔端已经攻破仙人关,连忙分兵会攻成都。成都之战现存史料基本都没有记载,只说蒙军先攻破成都,后听说中路军阔出王子薨于军中于是又撤离。但这种说法显然是站不住脚的。即便是中路军自己也没有因为阔出之死而停止进军,是遭孟珙击败后才撤离的,西路军更不可能因为另一路军主帅的死而主动放弃攻势。蒙军应该是在进攻成都时遭受较大损失而败离的。回军路上,蒙军会攻文州小城,刘锐继续坚守,蒙军仍然没有办法。但前一年因为丢失沔州被贬在文州的前兴元都统陈昱偷跑出城降敌,尽告虚实,蒙军断绝上游水源,终于攻破。刘锐举家自尽,赵汝曏被捕后也被残忍杀害。曹家将的先辈曹彬、曹玮生在宋军很强盛的时代,立下无数战功,而他们的后人生于宋祚将倾之际,依然挺身血战,虽战败却无比壮烈。曹家将的最后一战,曹友闻杀座马赴战死,与罗马帝国伟大的奴隶起义领袖斯巴达克斯选择了相同的结束方式,为曹家将的300年光辉荣耀画上了最后一道血色的休止符。