簡體   English   中英

幫助編碼 cURL 參數(從命令行可以正常工作,但不能從 PHP 腳本)

[英]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&para2=val2&...

或數組:

在 HTTP“POST”操作中發布的完整數據。 要發布文件,請在文件名前加上 @ 並使用完整路徑。 文件類型可以通過使用格式為“;type=mimetype”的文件名來明確指定。 此參數可以作為 urlencoded 字符串(如 'para1=val1&para2=val2&...' )或作為字段名稱作為鍵和字段數據作為值的數組傳遞。 如果 value 是一個數組,則 Content-Type header 將設置為 multipart/form-data。 從 PHP 5.2.0 開始,使用 @ 前綴傳遞給此選項的文件必須采用數組形式才能工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM