在 php 中获取 headers 和从 Java 发送的内容

Get headers and content sent from Java in php

Java 编码器向我发送了一些数据(一些 headers 和图片内容)。 它看起来像这样:

436f 6e74 656e 742d 4c65 6e67 7468 3a20
3138 3830 0d0a 0d0a ffd8 ffe0 0010 4a46
4946 0001 0101 0060 0060 0000 ffdb 0043
0010 0b0c 0e0c 0a10 0e0d 0e12 1110 1318
281a 1816 1618 3123 251d 283a 333d 3c39
3338 3740 485c 4e40 4457 4537 3850 6d51
...

我正在尝试用 $queryHex=pack("H*", $query); 解析它,其中 $query = file_get_contents("php://input"); 当我尝试 var_dump $queryHex 我得到 Co�@enB�Le�pth�18� 而不是一些我认为是图片内容的不可读符号。 我还尝试设置编码 (header('Content-Type: text/html; charset=utf-8');),结果仍然存在。 我做错了什么?如何获得正确的数据?

更新: 根据他的 API 他应该发送这样的东西:

    POST /url_for_detect HTTP/1.1

    Content-Type: image/jpeg; boundary=-
   [DATA]

DATA为图片内容。 但是那里有Content-length。他说没有必要。但是我仍然看不到 content-type 或获取数据。请他将他发送的查询发给我。

您发布的字节包含。

Content-Length: 1880

FF D8 FF E0 00 10 4A 46 49 46 <-- the start of the JPEG file

正如@awons 所建议的那样。询问发件人他给你发了什么。

编辑

将字节转换为二进制的 "quick'n'dirty" 小代码。

String content = "436f 6e74 656e 742d 4c65 6e67 7468 3a20"
        + "3138 3830 0d0a 0d0a ffd8 ffe0 0010 4a46"
        + "4946 0001 0101 0060 0060 0000 ffdb 0043"
        + "0010 0b0c 0e0c 0a10 0e0d 0e12 1110 1318"
        + "281a 1816 1618 3123 251d 283a 333d 3c39"
        + "3338 3740 485c 4e40 4457 4537 3850 6d51";

StringBuilder sb = new StringBuilder(content.replaceAll(" ", ""));
sb.delete(0, 48); // remove "Content-Length: 1880"
try (FileOutputStream fos = new FileOutputStream("content.jpg")) {
    while (sb.length() > 2) {
        fos.write(Integer.parseInt(sb.substring(0, 2), 16));
        sb.delete(0, 2);
    }
}