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

时间:2015-04-10 11:51:52

标签: java php pack unpack

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

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时,我得到了 有限公司@ enBLepth18 而且我认为某些不可读的符号是图片的内容。 我还尝试设置编码(header('Content-Type: text/html; charset=utf-8');),结果仍然存在。 我做错了什么?如何获得propper数据?

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

    POST /url_for_detect HTTP/1.1

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

DATA是图片的内容。 但那里有内容长度。他说这没必要。但是我stil看不到内容类型或获取DATA。要求他向我发送他发送的查询。

1 个答案:

答案 0 :(得分:1)

您发布的字节包含。

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);
    }
}