“麻烦”;“移植”;从bash到PHP的cURL
我正在尝试将此命令移植到PHP:“麻烦”;“移植”;从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开始,它可以工作。。我
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头):(…是的!!!!:)真不敢相信它这么简单:(我认为拥有一个“真正的”数组是可以的。