Я пытаюсь использовать 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)