Загрузка фотографий в Photobucket с помощью PHP - PullRequest
1 голос
/ 17 августа 2011

Я пытаюсь использовать Photobucket API.Я планирую написать пользовательский интерфейс в javascript, а затем использовать AJAX-вызовы к серверу, который в основном будет действовать как прокси для серверов Photobucket.Я использую сервер в качестве прокси-сервера, чтобы мой API-интерфейс Photobucket consumer_secret не был открыт.Однако у меня возникают проблемы с загрузкой фотографий с помощью PHP.Мне удалось заставить работать другие методы из API, включая аутентифицированные, такие как добавление и удаление альбома.Я ссылаюсь на

http://pic.pbsrc.com/dev_help/WebHelpPublic/Content/Methods/Album/Upload%20Media%20to%20an%20Album.htm

и

http://pic.pbsrc.com/dev_help/WebHelpPublic/Content/Examples/Uploading%20Media.htm

Я никогда не делал загрузку файлов в PHP, но я читал некоторые изсообщения здесь и в различных других местах в Интернете.По сути, у меня есть тестовая страница с HTML-формой, в которой пользователь, имя альбома и файл публикуются в сценарии php на моем сервере.Форма закодирована как multipart / form-data.

Когда запрос POST делает это на странице на моем сервере.Мой сервер ищет токены для пользовательских наборов и устанавливает основные параметры oauth.Затем он выполняет все необходимые действия для oauth точно так же, как и в других методах (в тех, где все работает).

Я исключаю параметр uploadfile из базовой строки и используюметод POST при генерации подписи oauth.Для моего параметра uploadfile я использую следующее

$params['uploadfile']= '@'.$_FILES['file']['tmp_name'];

Затем я настроил запрос curl следующим образом:

$ch = curl_init($url.$resource);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params); // Note $params is an array

$response = curl_exec($ch);

curl_close($ch);

Я также попытался добавить в

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible);');

Однако, после того, как все это Photobucket возвращается и говорит "Проверка подлинности не удалась, проверка подписи не удалась"

Я посмотрел на мою базовую строку, и она выглядит нормально.Вот пример.Я отредактировал фактические значения для различных токенов:

POST&http%3A%2F%2Fapi.photobucket.com%2Falbum%2Fusername%2Fupload&format%3Djson%26oauth_consumer_key%3D00000%26oauth_nonce%3D1313541553TcVIpWJ18WxEZeXO%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1313541553%26oauth_token%3D000000%26oauth_version%3D1.0%26title%3Dtitle%26type%3Dimage

Я не думаю, что это проблема с моей базовой строкой, потому что, как я сказал, она выглядит хорошо, и у меня нет проблем с любым из других методовЯ пробовал.Я думаю, что это проблема с тем, как curl отправляет данные по двум причинам.

1) Сначала у меня была проблема с удалением альбома, когда я пытался сделать запрос на удаление, и я получил похожееошибка, однако, когда я просто сделал пост-запрос с добавленным параметром _method=DELETE все работало нормально

2) Это единственный метод, с которым у меня были проблемы, и до сих пор это единственный метод, который требуетотправляемые данные кодируются как multipart / form-data

Я бы подумал, что это связано с тем, как я назначаю параметр uploadfile, но он не жалуется на файл, только подписьи в документации сказано, что этот параметр не входит в базовую строку.

У кого-нибудь есть мысли?Прямо сейчас я думаю, что мне не хватает некоторых curl_setopt.

Я бы сравнил свой запрос, отправленный с примером в ссылочных ссылках, но я не знаю, как просмотреть тело запроса Curl (я могу просмотреть заголовки, и они действительно говорят multipart / form-data)

1 Ответ

1 голос
/ 25 августа 2011

Я не осознавал, что отправка данных multipart / form-data не обязательно должна быть в кодировке raw url. Как только я перестал кодировать параметры, все заработало как положено.

...