प्रीव्यू URL: सैंडबॉक्स से पोर्ट खोलें
प्रीव्यू URL, Lizard पर सैंडबॉक्स के अंदर के किसी पोर्ट को एक प्राइवेट HTTPS एड्रेस देता है। 0.0.0.0 पर लिसन करने वाला सर्वर शुरू करें, फिर sandbox.exposePort(3000) (Python: expose_port) कॉल करें या lizard sandbox expose <id> 3000 चलाएँ। आपको https://<sandbox-id>-3000.sandbox.<region>.onlizard.com/?lizard_token=… मिलता है; सैंडबॉक्स के एक्सेस टोकन के बिना भेजी गई रिक्वेस्ट को HTTP 401 मिलता है।
टेस्ट स्टेटस: हमने 2026-10-12 को इस पेज को Lizard SDK, Lizard CLI 4.0.42 और सैंडबॉक्स राउटर के सोर्स से मिलाकर जाँचा। 502 वाला जवाब और आपके सर्वर को मिलने वाला Host हेडर 2026-10-20 को एक लाइव सैंडबॉक्स से लिए गए हैं।
CLI से
lizard sandbox exec $SB -- sh -c "nohup python3 -m http.server 3000 --bind 0.0.0.0 >/tmp/http.log 2>&1 &"
lizard sandbox expose $SB 3000expose टोकन वाला URL प्रिंट करता है; उसे ब्राउज़र में खोलें। स्क्रिप्ट के लिए hostname, url, port और accessToken पाने के लिए --json जोड़ें। URL हटाने के लिए lizard sandbox unexpose $SB 3000 चलाएँ।
Lizard SDK से
exposePort ब्राउज़र के लिए url, सिर्फ़ hostname और accessToken लौटाता है:
import { Sandbox } from '@lizard-build/sdk';
const sandbox = await Sandbox.create('base', { projectId: 'proj_123', timeoutMs: 600_000 });
await sandbox.process.exec(
"nohup python3 -m http.server 3000 --bind 0.0.0.0 --directory /tmp >/tmp/http.log 2>&1 </dev/null &",
);
const { url, hostname, accessToken } = await sandbox.exposePort(3000);
console.log(url); // open in a browser
const res = await fetch(`https://${hostname}/`, {
headers: { 'X-Lizard-Access-Token': accessToken },
});
console.log(res.status);import httpx
from lizard import Sandbox
sandbox = Sandbox.create("base", project_id="proj_123", timeout_ms=600_000)
sandbox.process.exec_(
"nohup python3 -m http.server 3000 --bind 0.0.0.0 --directory /tmp >/tmp/http.log 2>&1 </dev/null &"
)
exposed = sandbox.expose_port(3000)
print(exposed.url) # open in a browser
res = httpx.get(f"https://{exposed.hostname}/", headers={"X-Lizard-Access-Token": exposed.access_token})
print(res.status_code)getHost(port) (Python: get_host) भी पोर्ट पब्लिश करता है, लेकिन सिर्फ़ होस्टनेम लौटाता है और टोकन को sandbox.accessToken (Python: sandbox.access_token) में रखता है। unexpose(port) URL हटा देता है। ट्रैफ़िक भेजने से पहले सर्वर शुरू करें: जब तक सर्वर लिसन नहीं करता, URL 502 लौटाता है।
एक्सेस कैसे काम करता है
- हर सैंडबॉक्स का एक टोकन। टोकन सैंडबॉक्स का होता है, पोर्ट का नहीं: उस सैंडबॉक्स पर आपके एक्सपोज़ किए गए हर पोर्ट के लिए यही टोकन चलता है, और सैंडबॉक्स रहने तक यह नहीं बदलता। एक्सेस बंद करने के लिए पोर्ट को अनएक्सपोज़ करें या सैंडबॉक्स हटा दें।
- टोकन भेजने के तीन तरीके।
lizard_tokenक्वेरी पैरामीटर,X-Lizard-Access-Tokenहेडर याlizard_accessकुकी। - ब्राउज़र को कुकी मिलती है। जब ब्राउज़र
?lizard_token=वाला URL खोलता है, तो Lizard उस होस्टनेम के लिएlizard_accessकुकी सेट करता है (HttpOnly, Secure, SameSite=None, Partitioned, 30 दिन) और टोकन के बिना उसी एड्रेस पर रीडायरेक्ट करता है। इसके बाद पेज की स्क्रिप्ट, API कॉल और WebSockets कुकी के साथ जाते हैं, और टोकन हिस्ट्री और Referer हेडर में नहीं आता। जब कोई दूसरी साइट पेज को iframe में एम्बेड करती है, तब भी कुकी काम करती है। - हर पोर्ट का अलग होस्टनेम। हर पोर्ट का अपना होस्टनेम और अपनी कुकी होती है, इसलिए हर पोर्ट का पूरा URL एक बार खोलें।
- आपके सर्वर तक टोकन कभी नहीं पहुँचता। रिक्वेस्ट फ़ॉरवर्ड करने से पहले Lizard उसे क्वेरी, हेडर और कुकी से हटा देता है।
- आपके सर्वर को इंटरनल
Hostमिलता है। फ़ॉरवर्ड की गई रिक्वेस्ट में प्रीव्यू URL का होस्टनेम नहीं, बल्कि इंटरनल होस्टनेम होता है। एब्सोल्यूट URLHostसे नहीं, प्रीव्यू URL से बनाएँ। - WebSockets काम करते हैं। अपग्रेड रिक्वेस्ट आगे पहुँचती हैं, इसलिए हॉट रीलोड वाले डेव सर्वर और टर्मिनल UI काम करते हैं।
प्रीव्यू URL को पासवर्ड की तरह संभालें: जिसके पास यह है, वह उस सैंडबॉक्स के सभी एक्सपोज़ किए गए पोर्ट इस्तेमाल कर सकता है।
URL फ़ॉर्मेट और लाइफटाइम
https://<sandbox-id>-<port>.sandbox.<region>.onlizard.comURL सिर्फ़ तब तक काम करता है जब तक सैंडबॉक्स चल रहा है। प्लेटफ़ॉर्म पोर्ट 49983 अपने लिए रखता है; इसे एक्सपोज़ नहीं किया जा सकता। SDK या CLI से बना सैंडबॉक्स डिफ़ॉल्ट रूप से पाँच मिनट चलता है; जिस प्रीव्यू को खुला रखना है, उसके लिए लंबा timeoutMs या --timeout दें। लाइफटाइम की लिमिट देखें।
एरर
| स्टेटस | मैसेज | समाधान |
|---|---|---|
| 401 | This sandbox port is private (missing or wrong access token) | expose से मिला पूरा URL खोलें, या X-Lizard-Access-Token भेजें। |
| 403 | Port 3000 is not published for sandbox "…". Published: … | उस पोर्ट के लिए lizard sandbox expose या exposePort चलाएँ। |
| 404 | No running sandbox "…" | सैंडबॉक्स नहीं चल रहा। lizard sandbox list से जाँचें। |
| 502 | "message": "The sandbox is running but port is not open" वाला JSON | सर्वर शुरू करें और उसे 127.0.0.1 के बजाय 0.0.0.0 पर बाइंड करें। |
डेव सर्वर
ज़्यादातर डेव सर्वर तब तक 127.0.0.1 पर लिसन करते हैं जब तक आप कुछ और न बताएँ। होस्ट और एक तय पोर्ट पास करें:
npm run dev -- --host 0.0.0.0 --port 5173Vite Host हेडर भी जाँचता है और जिन होस्ट को वह नहीं जानता, उनके लिए Blocked request. This host (…) is not allowed. लौटाता है। आपके सर्वर को इंटरनल होस्टनेम मिलता है, इसलिए .onlizard.com नामों की लिस्ट से फ़ायदा नहीं होगा। vite.config.js में सभी होस्ट को अनुमति दें:
import { defineConfig } from 'vite';
export default defineConfig({
server: { allowedHosts: true },
});पोर्ट अब भी प्रीव्यू URL के एक्सेस टोकन से सुरक्षित रहता है। इसके बाद 5173 एक्सपोज़ करें।
संबंधित
- सैंडबॉक्स में Claude Code चलाएँ
- सैंडबॉक्स में OpenCode चलाएँ, उसके वेब UI समेत
- Sandboxes क्विकस्टार्ट
- SDK रेफरेंस
lizard sandbox
अपडेट: