---
title: "प्रीव्यू URL: सैंडबॉक्स से पोर्ट खोलें"
description: "exposePort या lizard sandbox expose से Lizard सैंडबॉक्स के पोर्ट को प्राइवेट HTTPS प्रीव्यू URL दें: URL फ़ॉर्मेट, एक्सेस टोकन, कुकी, WebSockets और एरर।"
url: https://lizard.build/hi/docs/sandboxes/preview-urls/
updated: 2026-10-25
---

# प्रीव्यू 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 से

```bash
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 3000
```

`expose` टोकन वाला URL प्रिंट करता है; उसे ब्राउज़र में खोलें। स्क्रिप्ट के लिए `hostname`, `url`, `port` और `accessToken` पाने के लिए `--json` जोड़ें। URL हटाने के लिए `lizard sandbox unexpose $SB 3000` चलाएँ।

## Lizard SDK से

`exposePort` ब्राउज़र के लिए `url`, सिर्फ़ `hostname` और `accessToken` लौटाता है:

```ts
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);
```

```python
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 का होस्टनेम नहीं, बल्कि इंटरनल होस्टनेम होता है। एब्सोल्यूट URL `Host` से नहीं, प्रीव्यू URL से बनाएँ।
- **WebSockets काम करते हैं।** अपग्रेड रिक्वेस्ट आगे पहुँचती हैं, इसलिए हॉट रीलोड वाले डेव सर्वर और टर्मिनल UI काम करते हैं।

प्रीव्यू URL को पासवर्ड की तरह संभालें: जिसके पास यह है, वह उस सैंडबॉक्स के सभी एक्सपोज़ किए गए पोर्ट इस्तेमाल कर सकता है।

## URL फ़ॉर्मेट और लाइफटाइम

```text
https://<sandbox-id>-<port>.sandbox.<region>.onlizard.com
```

URL सिर्फ़ तब तक काम करता है जब तक सैंडबॉक्स चल रहा है। प्लेटफ़ॉर्म पोर्ट `49983` अपने लिए रखता है; इसे एक्सपोज़ नहीं किया जा सकता। SDK या CLI से बना सैंडबॉक्स डिफ़ॉल्ट रूप से पाँच मिनट चलता है; जिस प्रीव्यू को खुला रखना है, उसके लिए लंबा `timeoutMs` या `--timeout` दें। [लाइफटाइम की लिमिट](https://lizard.build/hi/docs/platform/limits.md#sandbox-lifetime) देखें।

## एरर

| स्टेटस | मैसेज | समाधान |
|---|---|---|
| 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` पर लिसन करते हैं जब तक आप कुछ और न बताएँ। होस्ट और एक तय पोर्ट पास करें:

```bash
npm run dev -- --host 0.0.0.0 --port 5173
```

Vite `Host` हेडर भी जाँचता है और जिन होस्ट को वह नहीं जानता, उनके लिए `Blocked request. This host (…) is not allowed.` लौटाता है। आपके सर्वर को इंटरनल होस्टनेम मिलता है, इसलिए `.onlizard.com` नामों की लिस्ट से फ़ायदा नहीं होगा। `vite.config.js` में सभी होस्ट को अनुमति दें:

```js
import { defineConfig } from 'vite';

export default defineConfig({
  server: { allowedHosts: true },
});
```

पोर्ट अब भी प्रीव्यू URL के एक्सेस टोकन से सुरक्षित रहता है। इसके बाद `5173` एक्सपोज़ करें।

## संबंधित

- [सैंडबॉक्स में Claude Code चलाएँ](https://lizard.build/hi/docs/sandboxes/guides/claude-code.md)
- [सैंडबॉक्स में OpenCode चलाएँ](https://lizard.build/hi/docs/sandboxes/guides/opencode.md), उसके वेब UI समेत
- [Sandboxes क्विकस्टार्ट](https://lizard.build/hi/docs/sandboxes/quickstart.md)
- [SDK रेफरेंस](https://lizard.build/hi/docs/sandboxes/sdk-reference.md)
- [`lizard sandbox`](https://lizard.build/hi/docs/cli/sandbox.md)
