2011-08-17 41 views
1

我正在尝试使用Photobucket API。我正计划在javascript中编写用户界面,然后使用AJAX调用服务器,该服务器基本上充当Photobucket服务器的代理。我使用服务器作为代理,以便我的Photobucket API consumer_secret不在公开范围内。不过,我在使用PHP上传照片时遇到了一些问题。我已经能够从API中获取其他方法,包括添加和删除相册等已验证的方法。我一直在引用用PHP上传照片到Photobucket

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脚本中。表单被编码为多部分/表单数据。

当POST请求将其发送到我的服务器上的页面时。我的服务器查找用户设置的令牌并设置基本的oauth参数。然后,它为oauth完成所有必要的事情,与其他方法(一切正常)的方式完全相同。

我从基本字符串中排除uploadfile参数,并在生成oauth签名时使用POST方法。对于我uploadfile参数我使用

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

然后,我设置了像这样

$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一切POST请求的罚款

2)这是我已经受够了的问题,到目前为止,这是一个需要被发送编码为多/ form-data的数据的唯一方法的唯一方法

我本来以为这是一件与我分配uploadfile参数的方式有关,但它不会抱怨文件只有签名和文档表示将该参数从基本字符串中移出。

有没有人有任何想法?现在我在想我错过了一些curl_setopt。

我想比较我的请求发送到示例在参考链接,但我不知道如何查看curl请求的正文(我可以查看标题,它确实说multipart/form-data)

回答

1

我没有意识到多部分/表单数据提交不需要是原始的URL编码。只要我停止编码参数,一切按预期工作。

+0

嗨,请分享您的完整PHP代码?我需要用PHP将图片上传到Photobucket。谢谢 – Jay