2016-09-16 5 views
0

PHPでどのようにリクエストしますか?AzureテーブルストレージレストAPI

また、認可と日付の要件はどのようにして決まりますか?

例としてインターネット上にあるものはすべて古くなっているか、visualstudioを使用してリクエストまたはフォーマットしています。私は純粋なPHPまたは私のための例を探しています。

それは

を動作しません原因私はすでにAzureテーブルストレージのためのPHPがある知っているが、私はデータのみではなく照会されるようにAPIを使用する2013などから何かをリンクしないでください挿入または更新すると

これは今

GET /Data2()?filter=Username%20eq%20'{username}' HTTP/1.1 
Host: {tablename}.table.core.windows.net 
Authorization: SharedKey {accountname}:{accountkey} 
x-ms-date: 2016-09-16T00:31:08Z 
Content-Type: application/json;odata=nometadata 
Cache-Control: no-cache 

私の要求であり、私はこの応答を取得

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
    <code>AuthenticationFailed</code> 
    <message xml:lang="en-US">Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. 
RequestId:bf8eea79-0002-0107-15b1-0fad02000000 
Time:2016-09-16T00:31:13.7387356Z</message> 
</error> 
+0

、あなたはあなたの許可ヘッダーであなたのストレージアカウントを渡すことはできません。あなたの要求に基づいて承認ヘッダー値を計算する必要があります。承認ヘッダーの計算方法については、こちらをご覧ください(https://msdn.microsoft.com/en-us/library/azure/dd179428.aspx)。 –

答えて

1

@ Gauravが正しい場合は、署名を生成し、の形式でAuthorizationヘッダーに設定する必要があります。詳細はhttps://msdn.microsoft.com/en-us/library/azure/dd179428.aspx?f=255&MSPPError=-2147217396#Constructing_Elementを参照してください。ここで

とは、あなたの情報のためのPHPのコードスニペットです:手始めに

const AZURE_ACC_NAME = {storage_account}; 
const AZURE_PRIMARY_KEY = {storage_key}; 
const AZURE_TABLE = {table_name}; 

$date = gmdate('D, d M Y H:i:s T',time()); 
$StringToSign = 'GET' . "\n" . 
      ''. "\n" . //Content-MD5 
      '' . "\n" . //Content-Type 
      $date. "\n" . 
      '/'.AZURE_ACC_NAME.'/'.AZURE_TABLE.'()'; 
echo $StringToSign; 
$sig = base64_encode(
    hash_hmac('sha256', urldecode($StringToSign), base64_decode(AZURE_PRIMARY_KEY), true) 
); 

$endpoint = 'https://'.AZURE_ACC_NAME.'.table.core.windows.net'; 
$url = $endpoint.'/'.AZURE_TABLE.'()'; 

$headers = [ 
    "x-ms-date:{$date}", 
    'x-ms-version:2014-02-14', 
    'Accept:application/json;odata=nometadata', 
    "Authorization:SharedKey ".AZURE_ACC_NAME.":{$sig}" 
]; 
var_dump($headers); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$response = curl_exec($ch); 
var_dump($response); 
echo curl_error($ch); 
curl_close($ch); 
+0

あなたは人生保護者ですありがとうございます –

+0

フィルターをどうやってやるのですか?したがって、ParititonKeyをフィルタリングするか、または私の場合にプロパティをフィルタリングすることで、Username eq 'user'が見つかります。 –

+0

気にしないでください –