D2L Valence의 프로필 정보를 업데이트하려고합니다. GET 요청을 사용하여 정보를 성공적으로 다운로드했습니다. 그러나 간단한 업데이트를 완료하기 위해 요청을 형식화하는 방법을 잘 모르겠습니다.desire2learn 간단한 PHP PUT 업데이트
이 경우 프로필 json 블록의 복사본을 다운로드하고 닉네임 필드를 변경했습니다. d2l 클래스가 첫 번째 줄에서 호출되는 것을 염두에 두지 마십시오. 그것은 JSON 프로파일 블록을 얻을, 나는 그것을 변경하고 난 다음 그것을 밖으로 인쇄하는 경우, 나는이이 코드에서 내 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))
입니다
{"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":""}]}
을 얻을, 나는이 응답을 얻을
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
)
나는 분명히 뭔가를 놓쳤습니다. 제게 올바른 방향으로 조언하거나 알려주십시오.
입니다. ($ ch를, CURLOPT_HTTPHEADER, 배열 ("HTTP/1.1", "콘텐츠 형식 : 응용 프로그램/JSON은")) 'curl_setopt에 헤더를 변경,' 가 CURLOPT_PUT에 CURLOPT_POST을 변경 – Johnnygizmo
도움이되지 않는 것은 HTTP 변경 docs는 프로파일 업데이트가 POST가 아닌 PUT이라고 말하기 때문에 코드를 302로 설정합니다. – Johnnygizmo
나는 문제를 해결했다. (2 일간의 작업 후) SO가 허락하자마자 나는 대답을 게시 할 것이다. – Johnnygizmo