帮助编码cURL参数(从命令行运行正常,但不能从PHP脚本运行)

时间:2011-04-28 21:02:50

标签: php curl

我正在使用Facebook API,并通过终端成功使用以下命令将消息发布到另一个用户墙。

curl -F 'access_token=XXXXXXXXXX' \
 -F 'message=Hello World' \
 -F 'to={["id":XXXXXXX]}' \
 https://graph.facebook.com/me/feed

这很有效。我试图用这段代码通过php做同样的事情;

$fields = array(
    'access_token' => $t,
    'message' => $message,
    'to' => '{["id":'.$id.']}'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,  $url);
curl_setopt($ch, CURLOPT_POST, 1);          
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_exec($ch);
curl_close($ch);

这段代码成功地发布了一条消息,但它是在我的OWN墙上发出的(即它忽略了'to'参数)。我是cURL的新手,我确定我编码错了,或者可能错过了一个cURL标志,但我已经通过cURL进行了几个关于POST的教程,包括一些SO答案,我看不到我错过了什么。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

打印出来的是什么?

if ( 'POST' == $_SERVER[ 'REQUEST_METHOD' ]) {
    echo 'Posted: ';
    print_r( $_POST );
    exit;   
}


$t = '121';
$message = 'helo Worlds';
$id = 1234;

$fields = array(
    'access_token' => $t,
    'message' => $message,
    'to' => '{["id":'.$id.']}'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,  'http://localhost:8888/testbed/' ); // THIS script
curl_setopt($ch, CURLOPT_POST, 1);          
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE );

$out = curl_exec($ch);
curl_close($ch);

echo 'Received[ ' . $out . ' ]';

在我的本地包装盒上打印:

Received[ Posted: Array ( [access_token] => 121 [message] => helo Worlds [to] => {[\"id\":1234]} ) ]

答案 1 :(得分:0)

更新:

$ fields应为GET like string

  para1=val1&para2=val2&...

或数组:

  

要在HTTP“POST”中发布的完整数据   操作。要发布文件,请预先添加   带@的文件名并使用完整路径。   文件类型可以是显式的   通过以下文件名指定   格式中的类型   ';类型= mime类型'。这个参数可以   要么作为urlencoded传递   字符串   'para1 = val1& para2 = val2& ...'或 as    数组,字段名称为键,    字段数据值。如果价值是   数组,Content-Type标题将是   设置为multipart / form-data。截至PHP   5.2.0,使用@前缀传递给此选项的文件必须在   数组形式工作。