建元二年(公元前139年),张骞出使西域(今甘肃临洮南)途径匈奴时,被匈奴抓获,扣留。扣压不是几天、几月,而是10年。匈奴人给他娶妻生子,想以此拴住张骞,老死匈奴。然而张骞“持汉切不失,”念念不忘身负的使命。在被扣押期间,他采取韬晦之计,使匈奴人放松警惕,放宽对他的监禁。这一计果然有效,张骞抓住一个机会和少数随从逃跑,“西走数十日至大宛”。大宛国王早就想跟富饶的西汉交往,听说张骞来了,很高兴,问他:“你要到哪里去?”
张骞出使西域古代绘画
张骞答:“我要出使月氏,没想到中途匈奴人阻道。现在我逃出来了,希望国王派人送我去月氏。如果你这样做了,我回汉朝后告诉汉王,汉王定会用很多财物感谢你。”大宛国王满口答应,派人把张骞护送到康居,由康居转送大月氏,到大月氏以后,发现情况有变化。老国王被匈奴人杀害,立太子为王,征服了大夏。新国王认为,大月氏土地肥美,人民安居乐业,而且离汉朝太远,没有必要定要报复匈奴。
张骞没辙,又从大月氏回大夏。远朔元年(公元前128年),张骞取道昆仑山北麓,青海柴达木盆地的羌族居住区回国。由于羌族被匈奴控制,张骞在东归返回的途中,再次被匈奴抓获,后又趁匈奴内乱逃回长安,历尽千辛万苦,前后用了十三年时间。出发时带着随从一百人,返回时,只剩甘父一人同行,付出了很高的代价。为了表彰张骞的功绩,汉武帝封他为太中大夫,堂邑父为奉使君。