[英]Help encoding a cURL argument (works fine from the command line, but not from a PHP script)
我正在使用 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 標志,但我已經通過 ZC1BEF293167E5FE84BD35C7D87D3E 發布了幾個關於通過 ZC1BEF293167E5FE84BD35C7D87D3E 發布的教程,包括我錯過了什么。
非常感謝任何幫助!
這打印出什么?
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]} ) ]
更新:
$fields 應該是一個類似 GET 的字符串
para1=val1¶2=val2&...
或數組:
在 HTTP“POST”操作中發布的完整數據。 要發布文件,請在文件名前加上 @ 並使用完整路徑。 文件類型可以通過使用格式為“;type=mimetype”的文件名來明確指定。 此參數可以作為 urlencoded 字符串(如 'para1=val1¶2=val2&...' )或作為字段名稱作為鍵和字段數據作為值的數組傳遞。 如果 value 是一個數組,則 Content-Type header 將設置為 multipart/form-data。 從 PHP 5.2.0 開始,使用 @ 前綴傳遞給此選項的文件必須采用數組形式才能工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.