使用Python在http上发布二进制数据 - > PHP

时间:2012-11-01 23:59:02

标签: php python http post

我想将一个二进制数据字符串从Python脚本发布到一个Web服务器,PHP脚本应该将其存取并存储起来。我收到了我在Python端的PHP脚本的POST部分中回应的任何内容,所以我假设,实际的POST工作。但是,我发布了23个字节和strlen($ _ POST ['数据'])保持为0。 我用来获取数据的PHP脚本如下所示:

if (isset($_REQUEST["f"]) && $_REQUEST["f"]=="post_status") {
    $fname = "status/".time().".bin";
    if (file_exists($fname)) {
            $fname = $fname."_".rand();
              if (file_exists($fname)) {
                $fname = $fname."_".rand();
              }
    }
    echo strlen($_POST['data'])." SUCCESS!";

}

并且Python POST脚本如下所示:

    data = statusstr
    host = HOST
    func = "post_status"
    url = "http://{0}{1}?f={2}".format(host,URI,func)
    print url
    r = urllib2.Request(url, data,{'Content-Type': 'application/octet-stream'})
    r.get_method = lambda: 'PUT'
    response = urllib2.urlopen(r)
    print "RESPONSE " + response.read()

为什么我的数据似乎没有通过,我想知道?

谢谢,

1 个答案:

答案 0 :(得分:3)

PHP只会将已发布的值填充到$ _POST / REQUEST数组中,以用于作为表单数据内容类型之一发送的数据。在您的情况下,您需要直接从标准读取二进制数据,如下所示:

$postdata = file_get_contents("php://input");