【问题标题】:Send cUrl data without vars array发送不带 vars 数组的 cUrl 数据
【发布时间】:2012-11-28 21:28:15
【问题描述】:

我尝试在不设置变量或数组的情况下发布数据。我不知道这可能吗? 当我发送 $data = array('var_name'=>'var_val') 一切正常,但是当我设置 $data ='to send' 时,我没有得到任何发布数据。

$data = '要发送的样本数据';

    $ch = curl_init($url);                                                                      
    curl_setopt($ch, CURLOPT_POST, true);

    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    //curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-type: application/json'));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);                        

    $resp = curl_exec($ch);

【问题讨论】:

  • 这是php,对吧?我添加了一个 php 标签。

标签: php curl http-post


【解决方案1】:

来自the manual

CURLOPT_POSTFIELDS

要在 HTTP“POST”操作中发布的完整数据。要发布文件,请在文件名前加上 @ 并使用完整路径。可以通过使用格式为“;type=mimetype”的文件名来显式指定文件类型。该参数既可以作为像'para1=val1&para2=val2&...' 这样的urlencoded 字符串传递,也可以作为以字段名作为键、字段数据作为值的数组传递。如果 value 是一个数组,则 Content-Type 标头将设置为 multipart/form-data。从 PHP 5.2.0 开始,如果文件以 @ 前缀传递给此选项,则 value 必须是数组。

other 端假定简单字符串是键/值对。无论另一端是什么,都看不到您传递的未键入的值。如果这是 GET 而不是 POST,我会说只是检查查询字符串。由于情况并非如此,您需要使用键和值来发送数据,或者弄清楚另一端如何读取原始 POST 数据。如果另一端是PHP,有at least two ways可以做到这一点。

【讨论】:

    【解决方案2】:

    原因是“发送”成为 $_POST 数据的键。为了能够看到它,在 $url 的 PHP 文件中,执行 var_dump($_POST);这应该显示输出的关键值。但正如你所料,它没有任何价值。

    您可以将您在 POSTFIELDS 中写入的数据作为原始数据使用

    $yourPostedData = file_get_contents('php://input');
    

    【讨论】:

      【解决方案3】:

      POST 请求不一定包含成对的variable = value。有时它包含原始数据。要访问它,您需要使用变量$HTTP_RAW_POST_DATA,在这种情况下,该变量将填充原始 POST 数据。

      【讨论】:

        猜你喜欢
        • 2018-03-09
        • 1970-01-01
        • 2016-06-14
        • 2011-10-13
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多