[基礎(chǔ)] 如何在 AHK 下載網(wǎng)絡(luò)內(nèi)容到文件或變量

現(xiàn)在早已是網(wǎng)絡(luò)時(shí)代了您机,完全單機(jī)而不需要聯(lián)網(wǎng)的軟件很少了佳簸。某些時(shí)候,用 AHK 寫(xiě)個(gè)腳本也是需要去網(wǎng)絡(luò)獲取數(shù)據(jù)的讳侨。

下載網(wǎng)絡(luò)內(nèi)容到本地文件

有些時(shí)候我們需要把一個(gè)網(wǎng)頁(yè)呵萨、圖片、音頻等文件下載到本地跨跨,再做后續(xù)處理潮峦。在其他編程語(yǔ)言可能就比較麻煩了,比如先下載網(wǎng)絡(luò)內(nèi)容到一個(gè)字符串變量勇婴,然后創(chuàng)建一個(gè)文件忱嘹,將字符串寫(xiě)入,再保存文件耕渴。而 AHK 內(nèi)置的 UrlDownloadToFile 命令就是為這個(gè)場(chǎng)景量身定做的拘悦。

UrlDownloadToFile, URL, Filename

可以看到,這個(gè)命令的用法非常簡(jiǎn)單橱脸,第一個(gè)參數(shù)是文件的網(wǎng)絡(luò)地址础米,第二個(gè)參數(shù)是文件的本地地址。如果第二個(gè)參數(shù)不是完整路徑添诉,文件會(huì)被下載到當(dāng)前腳本的工作目錄屁桑,一般情況就是腳本自身的目錄。

比如我想下載 AHK 官網(wǎng)的 Logo 圖片到 C:\test.png栏赴,就可以這樣:

UrlDownloadToFile, http://ahkscript.org/logos/ahk_logo.png, C:\test.png

是不是非常簡(jiǎn)單蘑斧。除了 HTTP,UrlDownloadToFile 還支持 HTTPS 和 FTP 協(xié)議须眷。

下載網(wǎng)絡(luò)內(nèi)容到字符串變量

但有些情況竖瘾,我們并不需要將網(wǎng)絡(luò)內(nèi)容保存到文件里,而是直接使用花颗,比如直接顯示在控件里捕传。雖然也可以先寫(xiě)到文件再讀出來(lái),但這樣做不僅多此一舉扩劝,有額外的開(kāi)銷乐横,還需要考慮共用臨時(shí)文件求橄、臨時(shí)文件沒(méi)被刪除等問(wèn)題。

AHK 并沒(méi)有命令可以直接將網(wǎng)絡(luò)內(nèi)容下載到字符串變量葡公,但可以使用 COM 對(duì)象 WinHttp.WinHttpRequest.5.1罐农,官方文檔中有一個(gè)例子,用起來(lái)倒也不是很麻煩催什。

whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
; Open() 的第三個(gè)參數(shù)代表同步或者異步涵亏,現(xiàn)在不用過(guò)多關(guān)注,true 就可以了
; 以后我們會(huì)仔細(xì)了解同步和異步
whr.Open("GET", "https://autohotkey.com/download/1.1/version.txt", true)
whr.Send()
whr.WaitForResponse()
version := whr.ResponseText
MsgBox, % version

這樣就可以用 MsgBox 將從網(wǎng)絡(luò)獲取到的一個(gè)字符串彈出來(lái)了蒲凶。但比起 UrlDownloadToFile 還是麻煩了不少气筋,如果需要經(jīng)常使用,還是很不方便的旋圆,這就需要封裝成一個(gè)函數(shù)來(lái)使用宠默,比如這樣:

UrlDownloadToVar(url)
{
    static whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    whr.Open("GET", url, true)
    whr.Send()
    whr.WaitForResponse()
    return whr.ResponseText
}

和剛才的代碼差不多,但我這里 whr 是 static 類型的灵巧,因?yàn)橹恍枰跏蓟淮尉涂梢粤瞬蠼茫{(diào)用 ComObjCreate() 是有開(kāi)銷的。

但有些時(shí)候我們并不只需要傳入一個(gè) URL刻肄,可以還包含一些 HTTP Headers瓤球,而且使用 POST 方式訪問(wèn),這就需要再改造下這個(gè)函數(shù)敏弃,比如這樣:

UrlDownloadToVar(url, headers = "")
{
    static whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    whr.Open("POST", url, true)

    if (headers != "")
    {
        for key, value in headers
        {
            whr.SetRequestHeader(key, value)
        }
    }

    whr.Send()
    whr.WaitForResponse()
    return whr.ResponseText
}

用起來(lái)也很方便卦羡,比如我要使用 POST 方式訪問(wèn) test.org,攜帶兩個(gè) HTTP Headers麦到,key1:value1 和 key2:value2:

result := UrlDownloadToVar("http://test.org"
    , { "key1" : "value1", "key2" : "value2" })

如果需要設(shè)置更多參數(shù)绿饵,比如超時(shí)時(shí)間,就需要查下 WinHttp.WinHttpRequest.5.1 的文檔了瓶颠,基本上都可以找到自己想要的功能蝴罪。

付費(fèi)解決 Windows、Linux步清、Shell、C虏肾、C++廓啊、AHK、Python封豪、JavaScript谴轮、Lua 等領(lǐng)域相關(guān)問(wèn)題,靈活定價(jià)吹埠,歡迎咨詢第步,微信 ly50247疮装。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市粘都,隨后出現(xiàn)的幾起案子廓推,更是在濱河造成了極大的恐慌,老刑警劉巖翩隧,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件樊展,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡堆生,警方通過(guò)查閱死者的電腦和手機(jī)专缠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淑仆,“玉大人涝婉,你說(shuō)我怎么就攤上這事≌岬。” “怎么了墩弯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蟀淮。 經(jīng)常有香客問(wèn)我最住,道長(zhǎng),這世上最難降的妖魔是什么怠惶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任涨缚,我火速辦了婚禮,結(jié)果婚禮上策治,老公的妹妹穿的比我還像新娘脓魏。我一直安慰自己,他們只是感情好通惫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布茂翔。 她就那樣靜靜地躺著,像睡著了一般履腋。 火紅的嫁衣襯著肌膚如雪珊燎。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,850評(píng)論 1 290
  • 那天遵湖,我揣著相機(jī)與錄音悔政,去河邊找鬼。 笑死延旧,一個(gè)胖子當(dāng)著我的面吹牛谋国,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迁沫,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼芦瘾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捌蚊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起近弟,我...
    開(kāi)封第一講書(shū)人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缅糟,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后藐吮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體溺拱,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年谣辞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迫摔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泥从,死狀恐怖句占,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躯嫉,我是刑警寧澤纱烘,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站祈餐,受9級(jí)特大地震影響擂啥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帆阳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一哺壶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜒谤,春花似錦山宾、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至阶祭,卻和暖如春绷杜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背濒募。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工鞭盟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萨咳。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疫稿,于是被迫代替她去往敵國(guó)和親培他。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹃两,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)舀凛,斷路器俊扳,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,799評(píng)論 25 707
  • Ubuntu的發(fā)音 Ubuntu懊烤,源于非洲祖魯人和科薩人的語(yǔ)言梯醒,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲(chóng)de夢(mèng)閱讀 99,207評(píng)論 9 467
  • linux資料總章2.1 1.0寫(xiě)的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,147評(píng)論 2 34
  • 4歲前后的孩子腌紧,成天屎尿屁的說(shuō)茸习。不管和4歲的小米說(shuō)什么,說(shuō)著說(shuō)著就說(shuō)到了屎粑粑壁肋,糾正得非常頭疼号胚。 索性買了這個(gè)屎粑...
    米小讀書(shū)閱讀 1,352評(píng)論 1 3