# Script HTTP 客户端

> 此示例仅能在
> [OAK POE 设备](https://docs.luxonis.com/hardware.md#poe-designs)
> 上运行。您需要
> **bootloader**
> 版本在
> **0.0.15**
> 或以上。您可以通过运行
> `python3 examples/bootloader/flash_bootloader.py`
> 来刷写 bootloader。

此示例将向 http://api.ipify.org 发送 [HTTP 请求](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol)，并打印您的公共 IP。

## 演示

```bash
~/depthai-python/examples/Script$ python3 script_http_client.py
Sending http GET request...
200 OK
Public IP: b'123.123.123.123'
```

## 设置

请运行[安装脚本](https://github.com/luxonis/depthai-python/blob/main/examples/install_requirements.py)以下载所有必需的依赖项。请注意，此脚本必须在 git
上下文中运行，因此您需要先下载 [depthai-python](https://github.com/luxonis/depthai-python) 仓库，然后运行该脚本。

```bash
git clone https://github.com/luxonis/depthai-python.git
cd depthai-python/examples
python3 install_requirements.py
```

更多信息，请参考[安装指南](https://docs.luxonis.com/software/depthai/manual-install.md)。

## 源代码

#### Python

```python
#!/usr/bin/env python3
import depthai as dai

# Start defining a pipeline
pipeline = dai.Pipeline()

# Script node
script = pipeline.create(dai.node.Script)
script.setProcessor(dai.ProcessorType.LEON_CSS)
script.setScript("""
    import http.client
    import time

    node.warn('Sending http GET request...')
    h1 = http.client.HTTPConnection('api.ipify.org', 80)
    h1.request("GET", "/")
    r1 = h1.getresponse()
    node.warn(f'{r1.status} {r1.reason}')
    data1 = r1.read()
    node.warn(f'Public IP: {data1}')

    node.io['end'].send(Buffer(32))
""")

xout = pipeline.create(dai.node.XLinkOut)
xout.setStreamName('end')
script.outputs['end'].link(xout.input)

# Connect to device with pipeline
with dai.Device(pipeline) as device:
    device.getOutputQueue("end").get() # Wait for the "end" msg
```

#### C++

```cpp
#include <iostream>

// Includes common necessary includes for development using depthai library
#include "depthai/depthai.hpp"

int main() {
    using namespace std;

    // Start defining a pipeline
    dai::Pipeline pipeline;

    // Script node
    auto script = pipeline.create<dai::node::Script>();
    script->setProcessor(dai::ProcessorType::LEON_CSS);
    script->setScript(R"(
    import http.client
    import time

    node.warn('Sending http GET request...')
    h1 = http.client.HTTPConnection('api.ipify.org', 80)
    h1.request("GET", "/")
    r1 = h1.getresponse()
    node.warn(f'{r1.status} {r1.reason}')
    data1 = r1.read()
    node.warn(f'Public IP: {data1}')

    node.io['end'].send(Buffer(32))
    )");

    // XLinkOut
    auto xout = pipeline.create<dai::node::XLinkOut>();
    xout->setStreamName("end");
    script->outputs["end"].link(xout->input);

    // Connect to device with pipeline
    dai::Device device(pipeline);
    device.getOutputQueue("end")->get<dai::Buffer>();
    return 0;
}
```

## 流程

### examples/script_http_client.pipeline.json

```json
{
  "pipeline": {
    "connections": [
      {
        "node1Id": 0,
        "node1Output": "end",
        "node1OutputGroup": "io",
        "node2Id": 1,
        "node2Input": "in",
        "node2InputGroup": ""
      }
    ],
    "globalProperties": {
      "calibData": null,
      "cameraTuningBlobSize": null,
      "cameraTuningBlobUri": "",
      "leonCssFrequencyHz": 700000000.0,
      "leonMssFrequencyHz": 700000000.0,
      "pipelineName": null,
      "pipelineVersion": null,
      "sippBufferSize": 18432,
      "sippDmaBufferSize": 16384,
      "xlinkChunkSize": -1
    },
    "nodes": [
      [
        0,
        {
          "id": 0,
          "ioInfo": [
            [
              [
                "io",
                "end"
              ],
              {
                "blocking": false,
                "group": "io",
                "id": 1,
                "name": "end",
                "queueSize": 8,
                "type": 0,
                "waitForMessage": false
              }
            ]
          ],
          "name": "Script",
          "properties": {
            "processor": 0,
            "scriptName": "<script>",
            "scriptUri": "asset:__script"
          }
        }
      ],
      [
        1,
        {
          "id": 1,
          "ioInfo": [
            [
              [
                "",
                "in"
              ],
              {
                "blocking": true,
                "group": "",
                "id": 2,
                "name": "in",
                "queueSize": 8,
                "type": 3,
                "waitForMessage": true
              }
            ]
          ],
          "name": "XLinkOut",
          "properties": {
            "maxFpsLimit": -1.0,
            "metadataOnly": false,
            "streamName": "end"
          }
        }
      ]
    ]
  }
}
```

### 需要帮助？

请前往 [OAKChina 官网](https://www.oakchina.cn/) 获取技术支持或解答您的任何疑问。
