张骞,是汉中人,建元年中当上了郎官。当时投降汉朝的匈奴人说匈奴打败了月氏王,月氏王逃亡并因此怨恨匈奴,但是没有人能帮助他一同攻击匈奴。汉朝正想准备消灭匈奴,听说此事后,想要派出使者到月氏,路途必然要经过匈奴境内,于是招募能够出使月氏的人。张骞以郎官的身份应召,出使月氏,与堂邑甘父一起从陇西出关。经过匈奴的时候,匈奴抓住了他们,押送到单于那里。单于说:“月氏国在我们北方,汉朝为什么要前往出使月氏?我想要派人出使南越,汉朝会听凭我的人过去么?”于是扣留了张骞十多年,给他择赔了妻室,并且有了儿子,然而张骞始终保留着汉朝的符节,不肯投降。
张骞居住在匈奴西部,趁机与他的下属向月氏国逃去,向西走了几十天到了大宛。大宛国听说汉朝有丰富的财物,想通使而不能,看见了张骞,很是惊喜,问他想要到哪里。张骞说:“我们为汉朝出使月氏却被匈奴封锁道路,如今逃亡出来,只希望大王派人引路送我们。如果真能够到达月氏,返回汉朝后,汉朝送给大王的财物是说不尽的。”大宛认为说的有道理,就护送张骞,抵达康居。康居再把他们转送到大月氏。大月氏王已经被匈奴杀掉,匈奴人用力他的夫人为王。已经使大夏国称臣做了大夏国的君主,土地肥沃富饶,境内很少有盗寇,感到满足安乐,又认为距离汉朝遥远而不想亲近汉朝,根本就没有报复匈奴的心思了。张骞从月氏到了大夏,最终不能摸透月氏的真实意图。
留下一年多,想要返回,要从羌人聚居的地方回去,又被匈奴人俘获。留下有一年多,单于死去,国内动荡混乱。张骞与匈奴妻子和堂邑甘父一起逃亡回到汉朝。朝廷封张骞为太中大夫,封堂邑甘父为奉使君。当初张骞出行时有一百余多人,同去十三年,只有二人能够回还。
汉朝天子听说了大宛及大夏、安息之类的国家都是大国,有很多奇特的物品,世代不迁徙,很大程度上跟中原国家有相同的习俗,而军队力量较弱,看中汉朝的财物;它北面的是大月氏、康居这些国家,军队强盛,可以用赠送财物、给以利益的办法使他们朝拜汉朝。如果真的能够用恩义使他们归服,那么就能扩充万里之广的土地,讲不同语言有不同习俗的各国就会前来归附,这样汉朝的威望恩德就会遍及四海。汉朝天子于是命令经由蜀郡、犍为郡派出负有见机行事使命的使者,四条道路上一同出使,都各自出行一二千里。
张骞以校尉的身份跟随大将军卫青攻击匈奴,知晓有水草之处,军队能够及时得到供给没有物资缺乏,于是被封为博望侯。这一年是元朔六年。过了两年,张骞当上了卫尉,跟随李广将军一起从右北平出发攻打匈奴。匈奴把李将军包围,军队死掉逃跑的人很多,而张骞没能按时救援应当被斩首,用钱赎罪贬为平民。
天子多次问询张骞关于大夏之国的情况。张骞已经失掉了侯位,于是说:“联合了乌孙之后,它西面的大夏等国都可以招来而成为汉朝的外臣。”天子认为有道理,于是封张拜骞为中郎将,率领三百人,各派两匹马,赶着数以万计的牛羊,带着价值数千万的黄金绢帛,分派多名持节的副使,道路可以方便通行的话就派人去往旁边的国家。
张骞回来后,封为专管接待宾客的大行令。过了一年多,张骞去世了。又过了一年,他所派遣出使大夏等国的副使都同有关国家的使者一起回来,于是(从此以后)汉朝西北方向的国家开始跟汉朝互通往来(互通使者)。