0

D2L Valence でプロファイル情報を更新しようとしています。GET リクエストを使用して情報をダウンロードすることに成功しました。しかし、単純な更新を完了するためにリクエストをフォーマットする方法がわかりません。

この場合、プロファイル json ブロックのコピーをダウンロードし、ニックネーム フィールドを変更しました。最初の行で呼び出される d2l クラスは気にしないでください。それはjsonプロファイルブロックを取得し、それを変更し、それを印刷すると、

{"Nickname":"Johnny","Birthday":null,"HomeTown":"","Email":"","HomePage":"","HomePhone":null,"BusinessPhone":null,"MobilePhone":null,"FaxNumber":null,"Address1":null,"Address2":null,"City":null,"Province":null,"PostalCode":null,"Country":null,"Company":null,"JobTitle":"","HighSchool":null,"University":null,"Hobbies":"","FavMusic":"","FavTVShows":"","FavMovies":"","FavBooks":"","FavQuotations":"","FavWebSites":"","FutureGoals":"","FavMemory":"","SocialMediaUrls":[{"Name":"Facebook","Url":""},{"Name":"Twitter","Url":""},{"Name":"Google+","Url":""},{"Name":"LinkedIn","Url":""}]}

これは私のPHPです

$output = d2l::get_user_profile($usercontext,"real_profile_id",true);
$output = str_replace("\"Nickname\":\"\"", "\"Nickname\":\"Johnny\"",$output);  
$random_hash = md5(date('r', time()));          

$url = $usercontext->createAuthenticatedUri("/d2l/api/lp/1.1/profile/real_profile_id","PUT");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("HTTP/1.1", "Content-Type: multipart/form-data; boundary=".$random_hash));
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$output);       
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, '/var/www/cacert.pem');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);

$response = curl_exec($ch);
print_r(curl_getinfo($ch))              

このコードから、この応答が得られます

Array
(
[url] => https://myurl.edu:443/d2l/api/lp/1.1/profile/myProfile?x_a=mykey&x_c=mykey&x_d=mykey&x_t=1349798248
[content_type] => text/html; charset=utf-8
[http_code] => 403
[header_size] => 218
[request_size] => 941
[filetime] => -1
[ssl_verify_result] => 20
[redirect_count] => 0
[total_time] => 0.171832
[namelookup_time] => 1.9E-5
[connect_time] => 0.033028
[pretransfer_time] => 0.105724
[size_upload] => 582
[size_download] => 13
[speed_download] => 75
[speed_upload] => 3387
[download_content_length] => 13
[upload_content_length] => 0
[starttransfer_time] => 0.171811
[redirect_time] => 0
[request_header] => POST /d2l/api/lp/1.1/profile/myProfile?x_a=mykey&x_c=mykey&x_d=mykey&x_t=1349798248 HTTP/1.1
Host: myurl.edu
Accept: */*
Content-Type: multipart/form-data; boundary=95b842a110e529794822be6870f2585c
Content-Length: 582


)

私はおそらく明らかな何かを見逃しています。正しい方向にアドバイスまたは指摘してください。

4

2 に答える 2

0

これは、必要な人のために、更新を行うために機能する PHP コードのブロックです。

$data は文字列で、json のテキストです

$opContext は、$authContext->createUserContext() で作成された有効なユーザー コンテキストです。

$url は送信先の REST パスです

私は問題があることを認識しています

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

しかし、私は今のところそれと一緒に暮らしています。

ここにコードがあります

$putData = fopen('php://temp/maxmemory:256000', 'w');  
if (!$putData) {  
    die('could not open temp memory data');  
}  
fwrite($putData, $data);  
fseek($putData, 0);
$url = $opContext->createAuthenticatedUri($url,"PUT");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("HTTP/1.1", "Content-Type: application/json"));
curl_setopt($ch, CURLOPT_PUT,true);
curl_setopt($ch, CURLOPT_INFILE,$putData);
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($data));        
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
$response = curl_exec($ch);             
fclose($putData);
return $response;
于 2012-10-10T16:30:05.353 に答える
0

フォローアップ コメントで独自の質問に回答しましたが、myProfile 更新ルートは POST ではなく HTTP PUT を使用します。これは一般に、ほとんどの Valence API に当てはまります (作成ルートは POST を使用し、更新ルートは PUT を使用します)。

于 2012-10-10T01:03:24.440 に答える