跳到主要內容

發表文章

目前顯示的是有「幹壞事」標籤的文章

[野人獻曝] 開個 Stable Diffusion WebUI 的懶人包

前篇提到 Stable Diffusion WebUI, 這次要利用 Google Colab 服務來跑這玩意。 主要流程其實很簡單: 如果還沒有下載模型檔的話, 請先打開主要作業的區塊執行開啟 Google Drive 的權限, 然後再到第三個大區塊中的下載輸入模型檔下載路徑, 下載完成後就可以開始下載 Stable Diffusion WebUI 並準備執行。 如果已經執行過下載模型的話, 可以直接按下主要作業那個大區塊中的執行即可。 當不想玩了以後,請記得按下第二個大區塊的執行。 這個步驟會把該次產生的圖片存回到 Google Drive 內。 網址: https://colab.research.google.com/drive/1irIstg03GHVtXJLVhYLOtNuUy3z7ELz_?usp=sharing

[野人獻曝] 架個 Stable Diffusion WebUI 來生個香香的老婆圖

A.I. 當道後, 什麼以文生文、以文生圖、以文生聲(?)等玩意陸續蹦出來。 別的先不說, 光是以文生圖就有像是 MidJourney 還是 Dall-E 等模型提供相關服務。 而後 NovelAI 自爆自己的以文生圖模型是透過 Danbooru 上收集的圖片所訓練, 外加相關程式碼也不小心外洩後, 你各位紳士們就開始在以文生圖這塊領域中尋找自己的婆了。 不過以上都不是重點, 本文只是想要記錄下 Stable Diffusion WebUI (以下簡稱 SDWebUI)的架設步驟而已。 其實安裝步驟出乎意料的簡單(當然是指在 Google CoLab 上), 只要以下幾個步驟,基本上就能把 SDWebUI 跑起來並且開始生圖: * 確保機器上有 Python 3 以上環境 * 下載 SDWebUI 原始碼,可以直接在 Github 上 clone 下來。 * 下載所需的模型:在產生 ACG 相關圖片的話,目前推薦使用 Anything 或是 Hentai Diffusion 等模型。不過要注意一點:模型檔案越大的話,硬體要求會更高(主要是顯卡的 GPU 和記憶體等級)。如果沒滿足需求的話可能會跑不起來 * 切換到 SDWebUI 目錄,執行以下指令開始跑 SDWebUI 的設定,會在這個步驟安裝其相依的 Python 套件並處理相關設定: COMMANDLINE_ARGS="--exit" REQS_FILE="requirements.txt" python launch.py *  把前面步驟所下載的模型檔案,搬移到 SDWebUI檔案目錄/models,例如 clone 到 /home/user/stable-diffusion-webui 的話,就把模型檔複製到 /home/user/stable-diffusion-webui/models 下。 * 執行以下指令,等待跑完以後,畫面應該會顯示一組 xxx.gradio.xxx 的網址,可以讓自己或朋友連進來玩(網址 72 小時內有效)。如果只是自用的話,也可以用 localhost 的網址開啟服務: COMMANDLINE_ARGS="--share --gradio-debug" REQS_FILE="requirements....

[野人獻曝] 安裝 Jupyter

......懶得解釋 Jupyter 是什麼了,自己去 Google 吧! 如果你的機器上沒有 Python ,而且也沒有裝 pip 的話, 請自行安裝這兩樣東西!(爆死 安裝方法超簡單,一行指令搞定(Python2 時): pip install jupyter  跑完安裝步驟下個以下指令就可以啟動了: jupyter notebook 然後照他的指示開啟 http://localhost:8888/?token=xxxxxxx 就能看到 Jupyter 畫面了。 ===========全劇終===========  上面是安裝在自己機器上的狀況, 但是如果是要裝在遠端機器上的話就還有多做以下設定: 增加密碼保護:否則就能讓不相關的人進你的主機惡搞 修改設定檔:以便可以存取 增加密碼保護可以透過以下指令: jupyter notebook password 接著會要求輸入密碼,這組密碼就會是登入 Jupyter 的根據。 之所以要修改設定檔的原因是因為 Jupyter 預設只提供本機存取, 所以只接受 localhost 或是 127.0.0.1 的 domain, 為了要能夠輸入外部 IP 存取 Jupyter ,才需要改以下這個設定檔: 家目錄/.jupyter/jupyter_notebook_config.py 通常剛裝完時都沒有這個檔案,所以要先透過以下指令手動產生: jupyter notebook --generate-config 接著開啟上述的設定檔,找到以下兩個項目,移除前面的註解,並且修改成以下內容: c.NotebookApp.allow_origin = "*" c.NotebookApp.ip = "0.0.0.0"  做完以上兩個步驟並重新啟動後應該就能夠在遠端存取了。 順帶一提: 這份文件 有提到設定檔中每個項目的作用說明,建議可以看看。        

[野人獻曝] 愚人節玩笑 PHPFaaS

前陣子因為鬧出 npm 之亂 , 所以我有打趣著說要做一個玩具, 減少對檔案的依存。 基於這個想法,所以我做了個號稱 PHPFaaS 的 廢物 玩具。 基本上他的運作流程就是: 呼叫 http://php.maid.tw/[函式名稱] 將要傳進的參數列編成 json 格式,以 POST 丟過去 後端接到 POST 來的內容後做一次 json_decode 後再使用 call_user_func_array 去呼叫指定函式並輸出結果 開發這個東西不算是個問題,但是還是要注意一下一些事情: 基本上,為了安全起見,不可能開放使用所有的函式。所以要列一份白名單,列出可用的函式。 有些函式的參數列會收到像是 STR_PAD_RIGHT 之類的常數,但是這個服務目前還沒辦法應對,所以有用到特定常數的話,就要自己想辦法找到那個常數代表的值才行。

[野人獻曝] 利用 IFTTT Maker 自訂自己的特殊需求(?)

大家應該都知道 IFTTT 是什麼樣的東西, 所以我就不多解釋了。 雖然一般而言, 我們確實只要在某個服務的狀態發生時, 才需要讓 IFTTT 幫我們做些事, (像是我們收藏 Flickr 上某張照片時就自動下載到 Dropbox 之類的。) 但通常可以選的服務就是檯面上有名號的服務。 一旦要做些比較特殊的事時, 嗯......通常直覺下都是自己刻東西來做, 老實說有點麻煩啦...... 所以後來 IFTTT 推出 Maker 這個玩意。 她可以接收來自使用者端的請求, 也可以把請求轉發到另外一個地方, 對某些特殊需求而言, 就不大需要額外刻東西。 以下簡介一下使用流程: 首先先到  https://ifttt.com/maker 找到你的 API Key 並且記下來。 接著你就可以到 Create Recipe 中選擇 Maker 後再選擇 Make a web request 開始新增你的食譜了。 記得 Event Name ,這個東西會在呼叫時用到 另外 Receive Request 只收以下這些參數:v alue1、value2 及 value3   這些參數,其他東西會無視。 發出 request 直接使用 POST https://maker.ifttt.com/trigger/{Event Name}/with/key/{API Key} 然後就看你要讓 IFTTT 接到哪裡即可。 不過要注意一點:因為上面的 Request 只收 value[1-3] 這三個參數,所以你也只能在 Ingridents 選擇這三項東西來用。這個就比較麻煩一點...... 使用大致上應該沒啥問題, 反正就是簡單的 POST 機制, 做些比較沒有敏感性的事情其實還蠻方便的。 不過要拿來控制你家的電氣系統就可能要再三思了(茶

[野人獻曝] 來講一下 youtube-dl 的使用

youtube-dl 大概是我看過最可怕的下載影片工具了, 雖然看名字你會認為她只能抓 youtube 的影片, 但實際上 主流的影音網站 的影片他都能抓。 (雖然這工具主要著墨於 youtube 就是了 安裝方法就不說, 反正 windows 用戶就抓一個可執行檔就可以跑了, linux / mac 下個指令應該也可以輕鬆安裝。 以下列出常用的指令: 簡單地抓影片:執行後會去抓最高畫質的影片並放在當前所在目錄。如果是播放清單的話,會整份清單上的影片都全跑一次。 [youtube-dl路徑] 影片url/或youtube播放清單 抓取指定畫質的影片:只限 youtube,其他網站沒試過 可以先用 [youtube-dl路徑] --list-formats 影片url 列出所有可用的 fmt 接著再下 [youtube-dl路徑] -f [fmt代碼] 影片url 只要影片中的音樂檔 [youtube-dl路徑] --extract-audio 影片url 如果還需要限定音質水準的話,可以多加 --audio-quality [0-9] ,0 品質最高,9 最低 也可以限定要輸出什麼編碼的檔案,只要多加 --audio-format [aac|vorbis|mp3|m4a|opus|wav] 即可。 只下載播放清單中的第 N ~ M 間的影片 [youtube-dl路徑] 播放清單網址 --playlist-start N --playlist-end M ,不過要記得如果是要從第一部影片開始抓的話 N 是要填 1 。 如果是要從第五個影片開始抓的話就只要加 --playlist-start 5 就好了 改變下載檔名 [youtube-dl路徑] 影片url -o "名稱或是名稱模板" 其中名稱模板可以放一堆變數替換掉,不過這就要翻說明內容才知道。沒設定這個選項的話,下載的檔名會是「影片標題_影片ID」。 其他還有一狗票選項可以設定,可以讓你的影片收藏更加豐富。 要說的話這東西的缺點就是只有文字列模式, 所以可能會用得很不習慣, 不過一旦習慣了, 大概會覺得一狗票抓影片的工具實在都弱爆了。 (回想起以前還要裝 GreaseMonkey Script 或是...

[野人獻曝] 簡介 Orchestrate.io

Orchestrate.io 是一個把 NoSQL 和搜尋服務結合在一起的 DaaS(Database as a Service)。 對於想要用搜尋服務也想同時使用 NoSQL 服務,但是資源卻不夠多的人,他的免費方案讓你可以輕鬆使用,所以我非常推薦。 使用方法很簡單,初使用者可以直接看範例 Code,瞭解最基本的用法後就可以開始寫 Code 了。

[野人獻曝] 千萬不要在 MySQL 內有用到 auto_increment 的表下 INSERT ... ON DUPLICATE

原因很可怕,所以不要問! 最近開了一個有 auto_increment 欄位的資料表, 並且將該表中幾個欄位設為唯一值索引, 然後就下了以下的SQL塞資料: INSERT INTO EXAMPLE (a, b, c) VALUES ('1', '2', '3') ON DUPLICATE KEY UPDATE d = '4' 結果發現 auto_increment 欄位中的值越變越大, 不過一千多筆的資料,流水號卻取到七萬多。 看了 MySQL 的說明 , 才發現下 INSERT ... ON DUPLICATE KEY 時碰到 auto_increment 欄位時, 流水號也會持續增加(只有 Update 時才不會增加), 所以下一次真的有新增資料時,流水號會跳得老遠去...... 當下只好照 StackOverflow 上的一篇回覆 修改程式碼解決這個不算大卻有點微妙的問題......

[野人獻曝] 使用 GitLab 來寫個簡單的 git log 介面

因為公司的版本管理用 Git ,所以裝個 GitLab 也是很正常的事! 說是這麼說啦,不過我也不算啥 Git 達人,所以研究這個東西只是基於我工作上需求而做的。 使用這隻API的方式很簡單,只要: 先到個人的帳號頁面拿到專屬的 private_token 然後看 GitLab 提供的 API 有什麼可用的,然後自己實作功能就好了 以下是實作列出專案的大略程式碼:

[野人獻曝] 讓 solr 將查出的資料作亂數排序

第一步:打開你的索引核心目錄中的 schema.xml 分別找到 fields 和 types 兩個區塊,並在區塊內加上以下內容: <fields> ...... <dynamicField name=" random* " stored="false" indexed="true" type=" rand " /> </fields> <types> ...... <fieldType name=" rand " class="solr.RandomSortField"  indexed="true" /> </types> 注意:紅字的地方名稱務必要一樣,不然索引應該會失敗。 第二步:重新啟動 solr ,完工! 如果你有設定 Replication 的話, 理論上應該會將這份 schema.xml 同步到 slave 機上。 接著你可以在 solr 的查詢介面中試著用 sort = random* [desc | asc] 試試看, 應該會看到不同查詢排序結果。 (注:*可以是任何字元,但是儘量不要用同一組字元,因為會得到同樣的結果,就沒有 random 的意義了) 以上,打完收工!

[野人獻曝] 在Server上安裝linux儀表板

有些時候想看系統上的一些資訊要自己下一票指令, 如果熟悉這些指令的話倒也就罷了, 但很多時候其實並不這麼熟悉, 所以就有人做了 一個儀表板 , 可以用網頁的形式顯示系統資訊, 一眼就可以看出來系統狀況。 他的安裝基本上很簡單: 確定系統上安裝了php5和php5-json(我想一般機器都會有 沒裝的話自行敲個 yum install / apt-get install 吧 下載檔案並解壓縮到網站目錄中 檔案網址: https://github.com/afaqurk/linux-dash/archive/master.zip 解壓縮這個檔案放到網站目錄 為了保險起見將這個目錄加上簡單的密碼保護 如果是用 nginx 的話,可以在 /etc/nginx/sites-enabled/default 下加上以下內容 location 目錄路徑 { auth_basic    "提示要求輸入密碼的內容"  auth_basic_user_file  "密碼檔路徑" }  然後利用 這個工具 產生密碼檔的內容,並且貼到密碼檔中,接著重新啟動 nginx 即可。 以上動作完成,輸入網址並且打上帳號密碼應該就可以看到你現在的系統狀態了。 以下是實際執行的畫面:  

[野人獻曝] 用Phantomjs來抓網站圖

嗯,因為某個專案的需要....... (我會跟妳說我其實是要做 anti22k.org 這個專案嗎?) 我又要開始弄網頁截圖的事了。 原本我想取巧, 用以前用過的 html2image 試試看, 不過很糟的是: 我忘記當初是怎麼設定的了Orz 雖然按照網站教學試著去裝,不過似乎不能用。 因此第一個選項立刻放棄! 接著又Google到一個 wkhtmltoimage , 他是wkhtmltopdf下的一個子專案, 看起來好像頗讚。 (因為好像只要解壓縮檔案就能用......) 但是解壓縮後執行又跟我哭么「error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory」, 所以又放棄了...... (其實是不想花時間解.......) 最後找到本文要講的 Phantomjs , 這東西在linux只要解壓縮後, 再搭配一段script就可以對網頁截圖。 實際的使用方法, 這裡有篇中文的文章可以看 , 照著作就可以抓圖了。 不過要注意一下, 如果抓的網頁不是單純英文字的話, (就是有中日韓文等文字時......) 要確認系統上有沒有安裝相應的字型, 否則抓出來的圖可能就是一堆方塊。 另外網頁編碼也需要注意一下, 如果不是utf-8的話,可能會碰到亂碼的問題。 如果是對岸gb編碼的話,只要有安裝相應的簡體中文字型應該是可以正常顯示。

[野人獻曝] 在EC2多掛一塊檔案空間

因為我的micro EC2才小小一塊10G空間, 然後被我拿去當畜生機堆著抓到的檔案...... 所以我要準備一塊比較大的空間來放檔案。 幸好AWS真是方便(又云會騙錢), 只要新開一個Volume就可以擁有一塊空間放檔案。 那基本上本文就是稍微為這次行動留個記錄兼教學。 首先請進到AWS Console的EC2部分, 然後再選擇「Elastic Block Store」下的Volumes, 你會看到如圖一的列表, 這是所有的EBS空間。 接著再依圖二指示,選擇Create Volumes, 會出現如圖三的視窗, 基本上由於是要開來做儲存用的, 所以只要輸入空間大小即可。 輸入完成後就會如圖四一樣, 有一塊可用的空間了。 圖一:ebs列表 圖二:選擇Create Volume 圖三:輸入所需空間 圖四:新增完成了 不過這只是把空間開好,實際上這塊空間並沒有掛上你的機器上, 所以接下來要把它掛到你目前的EC2上, 如圖五所示,點擊後會出現如圖六的視窗, Instances選擇需要掛的機器,至於Devices這個欄位請先記下來, 待會需要進SSH做設定。 總之,到這裡web介面的部份就完成了。 圖五:準備掛到機器上囉 圖六:注意highlight的地方 接下來請登入你的SSH, 然後輸入以下指令: sudo mkfs.ext3 {圖六中的Devices名稱} 這個指令會把這塊空間做類似格式化的動作, 可以直接按「y」繼續進行。 接著請再打開/etc/fstab這個檔案,把以下內容貼上去: {圖六中的Devices名稱}          {預定要放在哪個目錄下}    ext3    noatime   0     0 由於這個檔案應該是唯讀的,所以請務必使用sudo編輯此檔。 而內容部分中的  {預定要放在哪個目錄下} 代表這塊空間的路徑, 比方說你想要讓他放在自己的家目錄下, 可以輸入  /home/{your_username}/{blockname} 就可以了。 不過為了解說方便,我這裡假設要放在...

[野人獻曝] 開台新的EC2作台網站主機用吧

一切都是youtube的陰謀...... 其實我這篇文章真的是老梗中的老梗, 相信搜尋「開EC2 教學」應該就會有一狗票文章了。 所以我寫這篇的話,會比較著重於新手開新主機會碰到的狀況。 (再更精準地說,是要拿來給自己做筆記用的 :p) 基本上開EC2的流程, 就是以下的項目: 選擇機器的所在地:如果是要做計算資源的話其實也沒差啦.......這對於網站類型會比較有影響。 選擇要用的作業系統,也就是AMI:選擇你要用的AMI檔對之後的用途會有一些影響,比方說,若是你需要架個網站,但你要是選了一個沒有預先包好LAMP的AMI檔時,你就要在啟動主機後,自己安裝那些東西,會有點麻煩(但如果你有要自定編譯安裝的項目時,這一點其實未必需要)。 設定要跑的instance類型:這個嘛......跟錢有關......不過如果是做需要高資源的運算,還是用比較好的instance會比較好。 設定登入用的private key和security groups:private key是未來登入的根據,當然啦,未來是可以改成要輸入帳號密碼才能登入的機制,這點可以去Google一下就行了。至於security groups的部份,則關係服務是否可以正常運作的要素;比方說你開了一個apache,你必須要在security groups設定允許80這個port,才能讓apache運作,MySQL則是3306,而SSH就是22。如果你的某項服務不是用預設的port號時(如apache用8080時),則記得要改。 SSH登入主機:要上傳檔案還是管理系統、安裝程式都要用到SSH,所以如果上一步驟沒有設定允許22這個port時,那就是沒辦法登入了。另外要注意一點:一般狀況下,大部分AMI的預設登入帳號是 ec2-user ,但部分AMI檔的預設登入帳號就未必是這樣, 比方說 bitnami 開頭的AMI,預設的帳號就是 bitnami ,這點可能要多加注意。 嗯......基本上應該是這樣, 剩下的就是考驗自己的 *nix 管理能力了...... 之後有機會的話再來說說怎麼拿EC2幹些方便的壞事。

[野人獻曝] 讓你的S3上雲端(CDN的意味)

前因太複雜了,所以暫且不表(懶)。 反正後果就是我開了一個CDN來作吐圖的工作。 至於什麼是CDN,請參閱 這裡的說明 。 而這裡嘛,我假設正在看此文的人都有對 AWS 的服務有些概念, 所以就直接進入正題了。 要弄出一個CDN, 你首先必須要有一組AWS S3的bucket, 並且已經註冊了AWS Cloudfront, 這樣才能繼續以下的作業。 如果可以的話,順便多弄幾個domain names, 稍後會有機會用到(但非必須)。 以上準備工作完成後, 請打開瀏覽器,登入AWS Management Console, 然後跳到Amazon Cloudfront那一頁後, 再選擇 Create Distribution , 會跳出以下的視窗。 這個視窗是要指示你的資料來源, 主要分成Amazon S3和你自己的來源, 因為本文是講S3的部份,因此請選擇Amazon S3後, 再選擇放檔案的bucket後按下一步。 (至於那個Download和Streaming目前就不用理會了......我想一般個人是不會有機會作Streaming吧......所以只要選Download就好了) 接著出現的視窗會跟你提示一些設定, 主要就是: 要不要設定多個網域:比方說一個頁面如果用了來自一個網域的多張圖片時,因為瀏覽器的限制會導致所有圖片無法同時被載入。因此設置多個網域對應時,會增進頁面讀取速度。 要不要設定log紀錄:這個嘛......基本上我是沒設定啦,因為我也不會去看那些log。如果你有需要的話可以啟用這個功能? 使用的連線類型:基本上就是選HTTP and HTTPS就好,這個選項同時也會包括HTTPS。如果你的內容僅限使用HTTPS時,請選擇HTTPS Only。 是否啟用:基本上是選Enable啦。不過由於在設定完成後,AWS會先進行一次同步作業,所以你也可以先設定Disable。等到好了以後再開啟他。 Comments:啊......就是備註,要填不填隨便你啦。 Default Root Object:這東西應該就像是找不到資源時所吐的預設值吧?我是沒設定啦,或許哪位可以踹踹看? 按下Continue後, 就會跳到確認頁。 若是確認沒問題的話,按下完成後就可以了。 然後...

[野人獻曝] Google Picker

昨天空閒時刻在 Google API 頁面逛著逛著看到 Google Picker 這個玩意。 仔細看了頁面說明, Google Picker 這玩意的首頁就直截了當說了: Google Picker is a "File Open" dialog for the information stored in Google servers. With Google Picker, your users can select photos, videos, maps, and documents stored in Google servers. The selection is passed back to your web page or web application for further use. 既然他這麼好用, 想當然爾就刺激了我的技術魂, 所以昨天晚上稍微看一下文件後就寫了一個簡單的Sample了。 如果想試玩的話,請往 這裡 。 ======以下技術解析一下===== 基本上要用這玩意,實在是非常簡單。 只要先開這兩行: <script src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load('picker', '1', {'language':'zh-TW'});</script> 這樣就會先把Google Picker的程式碼先引入了。 然後以Google所提供的慣例中所展示的, 他是在頁面loading完後跳出對話框。 但是以我的sample言, 是在每一個連結被點擊時才觸發, 這點要先注意一下。 接著就是寫被觸發後的處理, 基本上都是以 google.picker.PickerBuilder 物件為主, 因此我們可以這麼寫: var picker = new google.picker.PickerBuilder().addView(google.picker.ViewId.IMAGE...

[野人獻曝] phpQuery的使用簡介

既然要爬資料,有個好用的工具當然是會比較好啦。 正所謂工欲善其事,必先利其器。 所以本次要來介紹一下 phpQuery 這個玩意。 什麼是phpQuery?從字面上你應該很容易聯想到 jQuery , 事實上,他就是php版的jQuery, 因此我們可以很簡單地用這個玩意去巡覽HTML元素的內容, 達到我們想爬資料的目的。 事實上,過年期間我在寫爬 Android Market 資料時, 就是用這個玩意幫我處理掉擷取app資訊的麻煩事。 以下稍微講解一下簡單用法: 在phpQuery的專案網站下載主要的類別檔,這個壓縮黨內只有一個檔案。下載後解壓縮到你要的地方後就可以了。 接著開啟編輯器來寫一段範例程式碼吧: <?php // 引入檔案 require '{phpQuery的主檔案}"; /* 這裡是要取得HTML內容的地方,請自行處理 不過為了示範方便,我們假設抓到的東西放在$html這個變數中 */ $pq = phpQuery::newDocument($html); // 接著就可以用這種方式找到某個元素內的html內容 $strContent = pq("你要找的元素路徑", $pq)->html(); // 或是某個元素內的屬性 $strContent = pq("你要找的元素路徑", $pq)->attr("某個屬性名稱"); // 也包括某個元素中的文字節點 $strContent = pq("你要找的元素路徑", $pq)->text(); // 最後,為了避免phpQuery吃光記憶體,可以下這行放掉所有已用的記憶體 phpQuery::$documents = array(); ?> 以上是簡單利用phpQuery作尋覽的範例, 當然phpQuery也是可以作HTML元素的內容維護, 使用方法與jQuery一樣, 所以這方面可以參考 phpQuery的說明文件 就好。

[野人獻曝] 某個WebProxy的......使用方法?

這一篇來告訴各位ProxyPy這個Web Proxy的......嗯......使用方法? 首先,可以確定一點的是, ProxyPy載入網頁的uri格式是: http://xxx.appspot.com/u?purl={query_string} 這個query_string就是代表你要瀏覽的網頁, 看起來可能蠻亂七八糟不知所云, 但說穿了也不過是經過一些處理過程而已。 主因當然是避免有人知道這串query_string所代表的網址是什麼。 不過本篇文章不是要來解釋怎麼解開那串query_string, 而是要解釋一下ProxyPy是怎麼處理那串query_string的(雖然看完以後你也會解就是了(汗))。 簡單來說,這串query_string經過了以下的處理步驟: 把網址文字反轉,如 http://tw.yahoo.com/ 反轉成 /moc.oohay.wt//:ptth 再將上述反轉的字串用 base64 重新編碼過,所以會得到  L21vYy5vb2hheS53dC8vOnB0dGg= 這組字串 接著再把上述字串處理過,使其符合RFC1738的規則 經過這些步驟你就可以得到以下的url: http://xxx.appspot.com/u?purl=L21vYy5vb2hheS53dC8vOnB0dGg%3D 知道了這個編碼規則以後, 相信搭配 前一篇文章 後(還有 某一篇關於爬資料 的文章), 你應該就知道可以作些什麼事了吧(笑)。 文章最後再提一下, 很多Web Proxy也是使用類似的方法來處理, 所以在踹的時候也可以把這些步驟拿來試試看喔^.<