▼
English
Deutsch
Plattdüütsch
Lëtzebuergesch
Nederlands
Dansk
Svenska
Bokmål
Nynorsk
Íslenska
Føroyskt
Español
Català
Galego
Português
Français
Italiano
Latina
Română
Rumantsch
Gaeilge
Suomi
Magyar
Euskara
Esperanto
日本語
简体中文
繁體中文(台灣)
繁體中文(香港)
한국어
Tiếng Việt
ไทย
Bahasa Indonesia
Bahasa Melayu
हिन्दी
Ελληνικά
Polski
Čeština
Українська
Русский
Türkçe
العربية
עברית
Kiswahili
ʻŌlelo Hawaiʻi
tlhIngan Hol
本站各表單做得到嘅一切,都可以用腳本做。所有回應都係 JSON,包括錯誤在內,所以你永遠唔使估回應體係結果定係說明。
向端點傳送 POST,用表單參數或者 JSON 請求體都得。兩者等價;揀你嘅工具方便嗰種。action 參數決定要執行嘅操作。凡係人輸入嘅內容 — 貼上嘅文字、URL、要翻譯嘅文字 — 都請用 --data-urlencode,因為 -d 會原樣傳送個值,遇到第一個 & 就會被截斷。好似 action 咁嘅固定值用普通嘅 -d 就得。wget 根本冇 --data-urlencode,所以用 wget 嗰陣要就自己對呢類值做百分號編碼,要就傳送 JSON 請求體,後者唔使任何編碼。
curl -X POST https://0wx.eu/api.cgi \
-d action=paste --data-urlencode 'content=hello & world'
curl -X POST https://0wx.eu/api.cgi \
-H 'Content-Type: application/json' \
-d '{"action":"paste","content":"hello & world"}'
wget -qO- --header='Content-Type: application/json' \
--post-data '{"action":"paste","content":"hello & world"}' https://0wx.eu/api.cgi
喺表單請求體入面,& 用嚟分隔參數,而 curl -d 唔會對你畀嘅內容做編碼。所以帶查詢字串嘅 URL 會喺第一個 & 度被截斷,其餘部分會作為單獨嘅參數到達。請用 --data-urlencode,或者傳送 JSON。多餘嘅參數會被拒絕而唔係忽略,所以呢個會明確咁失敗,而唔係存低半截連結。
# wrong -- the value is cut at the &
curl -X POST https://0wx.eu/api.cgi \
-d action=tinyurl -d 'url=https://example.com/?a=1&b=2'
# right
curl -X POST https://0wx.eu/api.cgi \
-d action=tinyurl --data-urlencode 'url=https://example.com/?a=1&b=2'
# also right -- JSON needs no escaping
curl -X POST https://0wx.eu/api.cgi -H 'Content-Type: application/json' \
-d '{"action":"tinyurl","url":"https://example.com/?a=1&b=2"}'
# wget has no --data-urlencode, so percent-encode it yourself...
wget -qO- --post-data 'action=tinyurl&url=https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2' https://0wx.eu/api.cgi
# ...or send JSON, which needs no encoding at all
wget -qO- --header='Content-Type: application/json' \
--post-data '{"action":"tinyurl","url":"https://example.com/?a=1&b=2"}' https://0wx.eu/api.cgi
可選。唔帶金鑰嘅請求係匿名嘅,行為同匿名訪客完全一樣 — 結果無論如何都係公開嘅,唯一嘅分別係佢會唔會出現喺你嘅檔案清單入面。喺帳戶頁面產生金鑰,並作為 bearer 令牌傳送;亦都可以透過 apikey 參數傳遞,但係放喺查詢字串入面嘅金鑰會留喺伺服器日誌同瀏覽器歷史入面。
curl -X POST https://0wx.eu/api.cgi \
-H 'Authorization: Bearer YOUR_KEY' \
-d action=whoami
wget -qO- --header='Authorization: Bearer YOUR_KEY' \
--post-data 'action=whoami' https://0wx.eu/api.cgi
| action | 參數 | 說明 |
|---|---|---|
whoami | — | 確認金鑰用得,並報告而家嘅限制。唔消耗任何配額;請先呼叫佢。 |
ip | — | 報告你嘅地址、佢嘅 PTR 記錄、地理定位到嘅國家、省/州同城市、座標,以及你傳送嘅 user agent。唔需要金鑰,帶唔帶金鑰答案都一樣。有意比網頁版窄:冇 WHOIS、冇 DNS 區域、亦都冇封鎖名單查詢,所以呼叫佢對伺服器嚟講淨係一次本地資料庫讀取。 |
upload | file (可重複), resize, lifetime, gallery 或者 g * | 上載一個或者多個檔案。一定要用 multipart/form-data。指定圖庫名稱會將檔案直接放入嗰個圖庫,並返回佢嘅 id。 |
tinyurl | url, lifetime | 縮短一個 URL。 |
hugeurl | url, lifetime | 故意將一個 URL 加長到荒謬嘅程度。 |
paste | content, lifetime | 儲存一段文字並返回指去佢嘅連結。 |
translate | content, to, from | 翻譯文字。to 同 from 用 langs 操作返回嘅代碼 — 注意佢哋唔一定係國家代碼:丹麥文係 da 而唔係 dk。from 可以省略或者填 auto,由後端自動偵測語言;短文字嘅話,明確指定會有更好嘅結果。 |
langs | 用 supported_langs 列出 translate 接受嘅語言:每種語言一個物件,代碼對應名稱,次序同本站提供嘅次序一樣。唔需要 API 金鑰。 | |
dyndns | key, ip, format | 更新動態 DNS 名稱。呢個係唯一唔需要 API 金鑰嘅操作:佢由路由器呼叫,而路由器淨係有一個填 URL 嘅欄位,冇辦法傳送請求標頭。key 係你帳戶入面顯示嘅每個名稱各自嘅更新金鑰,唔係你嘅 API 金鑰。省略 ip 就用你發起呼叫嘅地址。回應係事實上嘅 dyndns2 標準用詞 — good、nochg、badauth、abuse 或者 dnserr — 用純文字返回,因為路由器解析嘅就係呢個;加 format=json 可以攞到平時嘅 JSON。 |
listfiles * | page, g | 列出你嘅檔案,包含資訊面板顯示嘅所有內容,再加縮圖同直接連結。g 可以將範圍限定喺某一個圖庫,或者填 none 淨係列出唔喺任何圖庫入面嘅檔案。 |
listpastes * | page | 列出你嘅貼上內容,每條附帶 200 個字元嘅預覽,而唔係完整內文。 |
listurls * | page | 列出你嘅短網址同超長網址,以及每一個指去嘅網址。 |
otl * | share | 為你嘅某個檔案建立一次性連結。每次呼叫都會產生新嘅連結,所以將同一個檔案交畀兩個人會得到兩條連結。 |
listotl * | page | 列出你嘅有效一次性連結、每條連結指去嘅檔案,以及嗰個檔案係咪已經過期。 |
listgalleries * | — | 列出你嘅圖庫,包括 id、名稱、檔案數同發布狀態。 |
gallery * | g, publish | 報告圖庫嘅發布狀態,畀咗 publish 就會修改佢。 |
move * | share (可重複), gallery 或者 g | 將檔案移入圖庫,可以按名稱(唔存在就新建)或者按 id 指定。兩者都省略就將檔案移返去主清單。 |
delete * | share (可重複), g, otl, withfiles | 刪除檔案、貼上內容、短網址、圖庫、一次性連結,或者佢哋嘅任意組合。分享識別碼會先同你嘅檔案配對,然後再同你嘅貼上內容同連結配對,所以呼叫者唔使按類型區分。一次性連結單獨放喺 otl 入面:刪除連結唔可以同刪除佢指去嘅檔案混淆。 |
* 呢啲操作需要 API 金鑰。佢哋讀取或者修改某一個帳戶自己嘅資料,所以冇匿名形式。
share 同 g 接受重複欄位、JSON 陣列或者逗號分隔嘅清單 — 揀你嘅工具最方便嗰種。重複項會被忽略。
curl -X POST https://0wx.eu/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
-d action=move -d share=Ab3xK9pQ -d share=Zz7yT2mN --data-urlencode 'gallery=Holiday 2026'
curl -X POST https://0wx.eu/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
-d action=delete -d 'share=Ab3xK9pQ,Zz7yT2mN'
curl -X POST https://0wx.eu/api.cgi -H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_KEY' \
-d '{"action":"move","share":["Ab3xK9pQ","Zz7yT2mN"],"g":7}'
wget -qO- --header='Authorization: Bearer YOUR_KEY' \
--post-data 'action=delete&share=Ab3xK9pQ,Zz7yT2mN' https://0wx.eu/api.cgi
凡係需要指定圖庫嘅地方 — 無論係 upload 定係 move — 都有同樣兩種方式:g 畀已有嘅 id,或者 gallery 畀名稱,名稱唔存在嗰陣會新建。兩者都傳送嗰陣,以 g 為準。回應入面包含圖庫 id。注意,刪除圖庫淨係刪除圖庫本身,入面嘅檔案會留喺主清單入面 — 呢點同網頁表單唔同,網頁表單會喺問過之後連檔案一齊刪除。傳 withfiles=true 可以將檔案都刪埋:一個整理分組嘅腳本唔應該唔小心整唔見上載嘅內容。
curl -X POST https://0wx.eu/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
-F action=upload -F file=@photo.jpg --form-string 'gallery=Holiday 2026'
curl -X POST https://0wx.eu/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
-d action=gallery -d g=7 -d publish=true
wget -qO- --header='Authorization: Bearer YOUR_KEY' \
--post-data 'action=gallery&g=7&publish=true' https://0wx.eu/api.cgi
上載唔可以用 JSON 請求體,因為檔案一定要用 multipart 形式傳送。重複 file 部分就可以一次傳送多個檔案。每個檔案單獨報告:回應包含一個 files 清單列出被接受嘅檔案,同一個 rejected 清單列出被拒絕嘅檔案,所以部分成功仍然算成功。
curl -X POST https://0wx.eu/api.cgi \
-H 'Authorization: Bearer YOUR_KEY' \
-F action=upload \
-F file=@photo.jpg \
-F file=@notes.txt \
-F lifetime=7d
呢一項冇 wget 嘅寫法。wget 冇辦法構造 multipart/form-data 請求體 — 佢冇同 curl 嘅 -F 對應嘅功能 — 而上載一定要係 multipart。請用 curl,或者自己組裝請求體同 boundary,再用 --post-file 傳送。
對所有會儲存內容嘅操作嚟講都係可選嘅。接受純秒數,或者數字後面跟 m、h 或者 d — 同網頁表單接受嘅形式一樣。省略或者傳 0 就係永久儲存。
每個回應都係一個帶有 ok 欄位嘅 JSON 物件。成功嗰陣帶住結果;失敗嗰陣帶住一個穩定嘅 error 代碼同一段畀人睇嘅 message。請根據代碼做分支,將訊息寫入日誌。
{"ok":true,"type":"paste","share":"Ab3xK9pQ",
"url":"https://0wx.eu/p/Ab3xK9pQ","bytes":11}
{"ok":false,"error":"url_too_long",
"message":"URL exceeds the maximum length."}
當檔案帶有標籤嗰陣,listfiles 會喺佢嘅條目入面加入 file_tags:藝術家、標題同專輯,喺檔案上載嗰陣由 ID3、Vorbis 註釋或者 MP4 atom 讀取。冇嘢可以報告嗰陣(大多數檔案都係咁),呢個鍵係唔存在而唔係 null,所以讀取之前請先檢查。各個欄位亦都可能缺失 — 一個檔案可能有標題但係冇專輯。檔案元數據入面嘅其他內容一概唔會暴露:iTunes 購買嘅檔案記錄咗購買者嘅姓名同 Apple ID,呢啲係有意從來唔讀取嘅。
{"ok":true,"type":"files","total":2,"page":1,"pages":1,"files":[
{"share":"Ab3xK9pQ","name":"autobahn.mp3","mime":"audio/mpeg",
"bytes":8123456,"url":"https://0wx.eu/i/Ab3xK9pQ",
"file_tags":{"artist":"Kraftwerk","title":"Autobahn","album":"Autobahn"}},
{"share":"Zz7yT2mN","name":"photo.jpg","mime":"image/jpeg",
"bytes":204800,"url":"https://0wx.eu/i/Zz7yT2mN"}
]}
| error | HTTP | 說明 |
|---|---|---|
unknown_action | 400 | 冇呢個操作。 |
bad_json | 400 | 請求體唔係有效嘅 JSON,或者某個欄位包含咗巢狀結構。 |
unexpected_parameter | 400 | 收到咗嗰個操作唔接受嘅參數 — 通常係值入面有未編碼嘅 &。訊息入面會列出呢啲參數。 |
bad_key | 401 | 認唔到嗰個金鑰。錯嘅金鑰會被拒絕,而唔係靜靜雞當作匿名處理。 |
bad_url | 400 | URL 格式唔啱,或者用咗 http(s)、ftp、gopher 以外嘅協定。 |
bad_lifetime | 400 | 儲存期限唔係數字,亦都唔係數字後面跟 m、h 或者 d 嘅形式。 |
no_content | 400 | 冇傳送任何要儲存嘅內容。 |
url_too_long | 413 | URL 超過咗長度限制。 |
paste_too_long | 413 | 文字超過咗貼上內容嘅大小限制。限制係用 UTF-8 位元組計,所以非拉丁文字佔用嘅位元組數會多過佢嘅字元數。 |
too_many_files | 413 | 檔案數超過單次呼叫可以接受嘅上限。 |
no_usable_files | 415 | 所有檔案都被拒絕。請睇 rejected 清單了解原因。 |
backend_unavailable | 502 | 翻譯後端冇回應。 |
internal | 500 | 發生咗意外錯誤。已經寫入日誌。 |
請呼叫 whoami 讀取而家嘅值,唔好硬編碼 — 呢啲值由伺服器營運者設定,可能會變。大小用 UTF-8 位元組計。
0wx.sh 封裝咗上面嘅全部功能。佢係純 POSIX shell,淨係依賴 curl,而且短到可以喺執行之前讀一次 — 對一個會持有你 API 金鑰嘅腳本嚟講,呢個正正係應該做嘅事。將金鑰放入 OWX_KEY 而唔係透過 --key 傳遞,佢就唔會留喺你嘅 shell 歷史入面。
wget https://0wx.eu/clients/0wx.sh chmod +x 0wx.sh export OWX_KEY=YOUR_KEY ./0wx.sh help ./0wx.sh paste --content 'hello & world'
0wx.py 同 shell 客戶端功能一樣,但係會解析回應並印出各欄位嘅意思,而唔係將原始 JSON 掟畀你 — 想要原始形式就加 --json。淨係用標準函式庫:唔需要 requests,唔使安裝任何嘢。如果你寫緊自己嘅客戶端,佢嘅 send() 同 report() 函式值得一讀:兩者加埋展示咗點樣構造請求、點樣由失敗嘅請求攞出訊息,以及回應入面有啲乜。
wget https://0wx.eu/clients/0wx.py chmod +x 0wx.py export OWX_KEY=YOUR_KEY ./0wx.py listfiles ./0wx.py listfiles --json | jq '.files[].url'
0wx.pl 同 Python 版功能一樣,輸出亦都一樣。淨係用核心模組 — HTTP::Tiny 同 JSON::PP 由 Perl 5.14 起就隨 Perl 一齊發布,所以唔使安裝任何嘢。如果你寫緊自己嘅客戶端,值得同 Python 客戶端對照住讀:兩種語言喺請求出錯嗰陣嘅失敗方式唔同,兩個腳本都標明咗出錯嘅位置。
wget https://0wx.eu/clients/0wx.pl chmod +x 0wx.pl export OWX_KEY=YOUR_KEY ./0wx.pl listfiles
0wx.ps1 係 Python 客戶端喺 Windows 上嘅對應版本:一樣嘅命令、一樣嘅輸出,而且會解析回應而唔係將原始 JSON 掟畀你 — 想要原始形式就加 --json。佢係為部機上已經有嘅 Windows PowerShell 寫嘅,所以唔使安裝任何嘢,而且可以唔改就喺 PowerShell 7 上執行。你可能需要喺執行佢嘅視窗入面執行 Set-ExecutionPolicy -Scope Process Bypass,呢個係 Windows 問你係咪真係要執行一個下載返嚟嘅腳本 — 一個合理嘅問題,而且呢個檔案短到可以先讀一次。
$env:OWX_KEY = 'YOUR_KEY' .\0wx.ps1 listfiles .\0wx.ps1 paste --content 'hello & world' .\0wx.ps1 upload --file .\holiday.jpg --gallery 'Holiday 2026'
0wx.html 同桌面客戶端有同樣一組分頁,由三個檔案組成 — 一個頁面、一個樣式表同一個腳本 — 唔使安裝、唔用框架,除咗本站之外唔會由任何地方載入內容。分成三個而唔係一個,係因為本站嘅內容安全策略禁止內嵌腳本同樣式,呢點值得保留。可以將檔案拖放去佢上面。佢一定要由呢度開,而唔係儲存之後由你嘅磁碟開:API 唔傳送跨來源標頭,所以本地副本嘅每一個請求都會喺發出之前被你嘅瀏覽器拒絕。金鑰儲存喺記憶體入面,除非你剔咗記住佢。
https://0wx.eu/clients/0wx.html
0wx-gui.ps1 同桌面客戶端有同樣一組分頁,用 WinForms 繪製 — 即係完全唔使安裝任何嘢,因為佢已經係 Windows 嘅一部分。請將佢同 0wx.ps1 放喺同一個檔案夾入面:視窗借用嗰個檔案嘅請求處理邏輯,而唔係再帶一份副本,所以兩個檔案都需要。Windows 執行唔係佢自己寫嘅腳本之前會先問,呢個係合理嘅;兩個檔案都短到可以喺答之前讀一次。
powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
0wx-gtk.pl 係一個細細個嘅 GTK 視窗,有上載、貼上、縮短網址同瀏覽檔案嘅分頁 — 可以按清單或者按縮圖圖庫睇,並按圖庫篩選。佢係呢度唯一需要額外安裝嘢嘅客戶端 — Perl 嘅 GTK3 繫結 — 呢點值得同上面嘅 Windows 視窗版比較,嗰個乜都唔使安裝。佢用到嘅其他一切都隨 Perl 一齊發布。金鑰淨係儲存喺記憶體入面:閂咗視窗就會唔記得,設定 OWX_KEY 就會喺啓動嗰陣自動填入。無論佢顯示乜,伺服器嘅原始回應都喺 “Server reply” 下面撳一下就睇到。
apt install libgtk3-perl # or: dnf install perl-Gtk3 wget https://0wx.eu/clients/0wx-gtk.pl chmod +x 0wx-gtk.pl OWX_KEY=YOUR_KEY ./0wx-gtk.pl
0wx-android.apk 喺手機上做其他客戶端做得到嘅事:上載、貼上、縮短網址、翻譯,以及按清單或者圖庫瀏覽你嘅檔案。由任何其他應用程式將檔案分享畀佢就會上載,分享文字就會存做貼上內容。佢冇喺任何應用程式商店上架,所以你部裝置會問你係咪允許安裝 — 呢個問題一般嚟講都值得認真對待,亦都正因為咁完整原始碼都放咗喺呢度:請喺 Android Studio 入面開佢並自己構建,而唔係信呢個檔案。構建需要 JDK 21;入面嘅 BUILDING.md 講明咗原因。
https://0wx.eu/clients/0wx-android.apk # install it https://0wx.eu/clients/0wx-android.zip # build it yourself
呢度有意唔提供遠端獲取操作。佢會令伺服器去攞呼叫者指定嘅任意 URL,呢個係一個請求偽造嘅攻擊面,而腳本可以比表單更兇猛咁利用佢。請自己上載檔案。