Picasa api允许跨域GET请求。但是当我尝试发布图片/评论时,我收到了以下错误。
XMLHttpRequest无法加载
https://picasaweb.google.com/data/feed/api/user/default/albumid/5825390619150171601?access_token=ya29.AHES6ZSR2XSlImdSJxNBVczzfz4DPoW3vRvywTNg8ELNs6OStqSBbTM
。 Access-Control-Allow-Origin不允许原点“http://localhost”。
var url = 'https://picasaweb.google.com/data/feed/api/user/default/albumid/' + albumId + '?access_token=' + myToken;
$.ajax({
url: url,
data: f /*image file object*/,
contentType: f.type,
processData: false,
type: "POST",
success:function(data){
successCallback(data);
},
error:function(data){
failureCallback(data);
}
});
p.s:这是a link类似的stackoverflow讨论。
答案 0 :(得分:3)
对于坏人来说,之前没人回答过。有一些事情很好知道在哪里...
Access-Control-Allow-Origin标头必须包含在服务器响应中并设置为您的域名或*
当您通过Access-Control-Allow-Origin标头从Picasa获取公开相册时,设置为*
但是,当您访问需要身份验证的功能时,如上面的标题,Access-Control-Allow-Origin会以* .google.com
的形式返回我的理论是阻止人们构建一个使用Google免费存储后端的Picasa网站,但实际上它是Picasa网站的竞争对手。
最后一个重要的注意事项是,您永远不应该将安全令牌作为查询字符串发送!即使您使用https / ssl,网址也不会加密,有人可以嗅探网络流量并窃取安全令牌。我甚至不确定Picasa是否会接受它。你应该这样做:
var url = 'https://picasaweb.google.com/data/feed/api/user/default/albumid/' + albumId;
$.ajax({
url: url,
data: f /*image file object*/,
contentType: f.type,
processData: false,
type: "POST",
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Bearer " + myToken);
},
success:function(data){
successCallback(data);
},
error:function(data){
failureCallback(data);
}
});