Справка по кодированию аргумента cURL (отлично работает из командной строки, но не из скрипта PHP) - PullRequest
1 голос
/ 29 апреля 2011

Я работаю с 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);

Этот код успешно отправляет сообщение, но делает это на собственной стене (то есть игнорирует параметр «to»).Я новичок в cURL, и я уверен, что я неправильно его кодирую или, возможно, отсутствует флаг cURL, но я прошел несколько уроков по POSTing через cURL, включая несколько ответов SO, и не вижучего мне не хватает

Очень ценю любую помощь!

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Что это распечатывает?

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]} ) ]
0 голосов
/ 29 апреля 2011

ОБНОВЛЕНО:

$ поля должны быть GET как строка

  para1=val1&para2=val2&...

или массив:

Полные данные для отправки в HTTP-операции «POST».Чтобы опубликовать файл, добавьте @ к имени файла и используйте полный путь.Тип файла можно явно указать, следуя имени файла с типом в формате '; type = mimetype'.Этот параметр может быть передан в виде строки в кодировке urlen, например 'para1 = val1¶2 = val2 & ...' или в виде массива с именем поля в качестве ключа и полем данные как значение .Если значение является массивом, заголовок Content-Type будет установлен в multipart / form-data.Начиная с PHP 5.2.0, файлы, которые передаются в эту опцию с префиксом @, должны работать в виде массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...