“麻烦”;“移植”;从bash到PHP的cURL

“麻烦”;“移植”;从bash到PHP的cURL,php,bash,curl,Php,Bash,Curl,我正在尝试将此命令移植到PHP: curl -i -X POST http://website.com \ -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \ -H "Accept: Application/json" \ -H "X-Requested-With: XMLHttpRequest" --data "var1=output1&var2=output2" 从bash开始,它可以工作。。我

我正在尝试将此命令移植到PHP:

curl -i -X POST http://website.com \
-H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
-H "Accept: Application/json" \
-H "X-Requested-With: XMLHttpRequest" --data "var1=output1&var2=output2"
从bash开始,它可以工作。。我得到了JSON输出

这是我在PHP中编写的内容,以尝试获得相同的结果:

<?php
function blabla() {

    $curl_parameters = array(
        'var1'    =>  "output1",
        'var2'    =>  "output2",
    );

    $ch = curl_init();

    curl_setopt($ch,CURLOPT_URL,"http://website.com");
    curl_setopt($ch,CURLOPT_POST,true);
    curl_setopt($ch,CURLOPT_HEADER,true);
    curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query( $curl_parameters ));
    curl_setopt($ch,CURLOPT_HTTPHEADER,array (
        "Content-Type"      => "application/x-www-form-urlencoded; charset=UTF-8",
        "Accept"            => "Application/json",
        "X-Requested-With"  => "XMLHttpRequest",
    ));

    $output=curl_exec($ch);

    curl_close($ch);
}

echo blabla();
?>


不幸的是,在这段代码中,我只得到了一个302找到的HTTP头作为输出()。。似乎没有传递变量(bash命令中的
--data
部分)。

尝试添加curl follow 302重定向

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
还要确保http_build_query()函数使用“&”作为参数分隔符。在某些PHP配置中,默认情况下它可能是“&;”

$query = http_build_query($data, '', '&');

不如干脆
curl\u setopt($ch,CURLOPT\u POSTFIELDS,$curl\u parameters)?我认为您不需要调用
http\u build\u query

问题在于
CURLOPT\u HTTPHEADER
。它应该是一个字符串数组,如下所示:

curl_setopt($ch,CURLOPT_HTTPHEADER,array(
    'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
    'Accept: application/json',
    'X-Requested-With: XMLHttpRequest',
));

不。。仍然只得到我添加到问题中的“302FoundHeader”和PHP代码片段的输出;我的错误。传递数组会导致
multipart/form data
内容,而不是所需的
application/x-www-form-urlencoded
我尝试了
curl\u setopt($ch,CURLOPT\u POSTFIELDS,http\u build\u query($curl\u参数,,'&')但输出仍然相同(仅http头):(…是的!!!!:)真不敢相信它这么简单:(我认为拥有一个“真正的”数组是可以的。