Mar*_*mos 8 php cloud ubuntu-one
我搜索了整个互联网,试图找到一个可以为我指明正确方向的简单示例,但没有运气,所以我的问题来了:
我想登录到 Ubuntu One 并从我的网页同步(或几乎读取)文件,所有这些都是用 PHP 完成的。访问文件的需求都在该页面中描述:https : //one.ubuntu.com/developer/account_admin/issue_tokens/cloud/
我能够完成第一个请求:
$url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20try1';
$data = curlPetition(array('URL'=>$url,'USERPWD'=>'user:pass'));
$ar = fopen('uOne','w');fwrite($ar,$data['responseBody']);fclose($ar);
$tokenA = json_decode($data['responseBody'],1);
Run Code Online (Sandbox Code Playgroud)
好的,curlPetition 只进行基本的 curl 请愿。请注意,您需要一个有效的用户:通过 ubuntu 一个帐户。我在 json 中使用 "consumer_secret" 、 "token" 、 "consumer_key" 、 "name" 、 "token_secret" 正确得到响应。甚至该条目也出现在 ubuntu 授予的应用程序中。
我已经安装了最新的 OAuth PCL php extensión 并且它运行良好。但是当我尝试:
$api_url = 'https://one.ubuntu.com/api/file_storage/v1/';
$conskey = $tokenA['consumer_key'];
$conssec = $tokenA['consumer_secret'];
$token = $tokenA['token'];
$secret = $tokenA['token_secret'];
$oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
$oauth->enableDebug();
$oauth->enableSSLChecks();
$oauth->setToken($token,$secret);
$oauth->fetch($api_url.'~/Ubuntu%20One/');
print_r($oauth->getLastResponse());
Run Code Online (Sandbox Code Playgroud)
我转到“正在进行的 OpenID 事务”页面,您在进行手动 Web 登录时会通过该页面。我肯定做错了什么。我试图从https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/使用 $oauth->fetch、$oauth->getAccessToken 和 $oauth->getRequestToken获得第二步,所有与403 错误:S
我试图弄清楚有效负载是如何工作的,但主要示例是用 python 编写的,使用“import ubuntuone.couch.auth as auth”,这使得令牌内容几乎是自动的。
我很想得到一些提示。谢谢
sil*_*sil 11
我认为问题在于在https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/ 上定义的“创建新令牌”工作流程的第 2 步失败了,因为该服务是 503本周末下跌了几个点。您需要捕获这种情况并处理它(503 表示您应该稍后重试请求,按照标准 HTTP)。
我已经测试了下面的 PHP(注意:我不是 PHP 黑客,所以它可能不是最惯用的代码)并且它对我来说很好用。它经过三个步骤:
您将看到下面评论的各个部分。请记住,这会请求并获得一个全新的令牌;获得令牌后(在第 2 步之后),将其保存在某处;不要每次都要求一个新的。
<?php
function curlPetition($arr){
$curl = curl_init($arr['URL']);
if($arr['USERPWD']){curl_setopt($curl, CURLOPT_USERPWD, $arr['USERPWD']);}
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$out = curl_exec($curl);
curl_close($curl);
$data['responseBody'] = $out;
return $data;
}
/* Define username and password details */
$email_address = 'stuart.langridge@canonical.com';
$password = 'MY PASSWORD';
/* Step 1: Get a new OAuth token from Ubuntu Single-Sign-On */
$url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20try1';
$data = curlPetition(array('URL'=>$url,'USERPWD'=> $email_address.':'.$password));
$tokenA = json_decode($data['responseBody'],1);
/* Set up that new token for use in OAuth requests */
$conskey = $tokenA['consumer_key'];
$conssec = $tokenA['consumer_secret'];
$token = $tokenA['token'];
$secret = $tokenA['token_secret'];
$oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
$oauth->enableDebug();
$oauth->enableSSLChecks();
$oauth->setToken($token,$secret);
/* Step 2: tell Ubuntu One about the new token (signed with the token itself) */
$tell_u1_about_token_url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/' . $email_address;
$oauth->fetch($tell_u1_about_token_url);
print_r($oauth->getLastResponse());
/* Step 3: use the token to make a request to the Files API */
$api_url = 'https://one.ubuntu.com/api/file_storage/v1/';
$oauth->fetch($api_url.'~/Ubuntu%20One/');
print_r($oauth->getLastResponse());
?>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2981 次 |
| 最近记录: |