加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Drupal 7 – 使用PHP Curl更新具有服务的用户

发布时间:2020-12-13 16:51:05 所属栏目:PHP教程 来源:网络整理
导读:我正在使用Drupal 7和服务模块,我正在尝试使用 PHP更新用户配置文件.卷曲. 在发送“PUT /更新”之前,我是否始终必须登录? 到目前为止这是我的代码: ?php// REST Server URL$request_url = 'http://mywebsite/end/user/login';// User data$user_data = arr
我正在使用Drupal 7和服务模块,我正在尝试使用 PHP&更新用户配置文件.卷曲.
在发送“PUT /更新”之前,我是否始终必须登录?

到目前为止这是我的代码:

<?php


// REST Server URL
$request_url = 'http://mywebsite/end/user/login';

// User data
$user_data = array(
  'username' => 'user2','password' => 'pass1',);

// cURL
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$request_url);
curl_setopt($curl,CURLOPT_POST,1); // Do a regular HTTP POST
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));

curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($user_data)); // Set POST data
curl_setopt($curl,CURLOPT_RETURNTRANSFER,TRUE);

$response = curl_exec($curl);

print $response;

$http_code = curl_getinfo($curl,CURLINFO_HTTP_CODE);
// Check if login was successful
if ($http_code == 200) {
  // Convert json response as array
  $logged_user = json_decode($response);
}
else {
  // Get error msg
  $http_message = curl_error($curl);
  die($http_message);
}

print_r($logged_user);

// REST Server URL
$request_url = 'http://mywebsite.com/end/user/8&XDEBUG_SESSION_START=netbeans-xdebug';

$user_data = array('current_pass' => 'pass1','pass' => 'pass2');

// Define cookie session
$cookie_session = $logged_user->session_name . '=' . $logged_user->sessid;

// cURL
$curl = curl_init($request_url);
curl_setopt($curl,array('Accept: application/json','Content-type: application/json')); // Accept JSON response
curl_setopt($curl,CURLOPT_PUT,TRUE);
curl_setopt($curl,CURLOPT_HEADER,TRUE); // FALSE);  // Ask to not return Header
curl_setopt($curl,CURLOPT_COOKIE,"$cookie_session"); // use the previously saved session
curl_setopt($curl,CURLOPT_FAILONERROR,TRUE);

// Emulate file.
$serialize_args = json_encode($user_data);
    $putData = fopen('php://temp','rw+');
    fwrite($putData,$serialize_args);
    fseek($putData,0);
curl_setopt($curl,CURLOPT_INFILE,$putData);
curl_setopt($curl,CURLOPT_INFILESIZE,drupal_strlen($serialize_args));

$response = curl_exec($curl);
$http_code = curl_getinfo($curl,CURLINFO_HTTP_CODE);

// Check if login was successful
$ret;
if ($http_code == 200) {
  // Convert json response as array
  $ret = json_decode($response);
}
else {
  // Get error msg
  $http_message = curl_error($curl);
  die($http_message);
}

print_r($ret);

curl_close($curl);

}



?>

我在这里错过了什么?
我的个人资料没有任何改变.

欢迎任何答案!

解决方法

希望这可以帮助你.

$service_url = 'http://mywebsite/end/user/login'; // .xml asks for xml data in response
    $post_data = array(
      'username' => 'user2',);

$post_data = http_build_query($post_data,'','&'); // Format post data as application/x-www-form-urlencoded
// set up the request
$curl = curl_init($service_url);
curl_setopt($curl,true);  // have curl_exec return a string
curl_setopt($curl,true);             // do a POST
curl_setopt($curl,$post_data); // POST this data
// make the request
curl_setopt($curl,CURLOPT_VERBOSE,true); // output to command line
$response = curl_exec($curl);
curl_close($curl);

// parse the response
$xml = new SimpleXMLElement($response);
$session_cookie = $xml->session_name .'='. $xml->sessid;
if(empty($xml->session_name) && empty($xml->sessid)){
    echo 'Wrong';exit;
}     

$service_url = 'http://mywebsite/end/user/token'; // .xml asks for xml data in response

$curl = curl_init($service_url);
curl_setopt($curl,$post_data); // POST this data
curl_setopt($curl,"$session_cookie"); // use the previously saved session
// make the request
curl_setopt($curl,true); // output to command line
$csrf_token = curl_exec($curl);
curl_close($curl);
$xml = new SimpleXMLElement($csrf_token);
$csrf_token = $xml->token;
$csrf_header = 'X-CSRF-Token: ' . $csrf_token;

// REST Server URL
$request_url = 'http://mywebsite/end/user/8&XDEBUG_SESSION_START=netbeans-xdebug';
$user_data = array('current_pass' => 'pass1','pass' => 'testing');

// cURL
$curl = curl_init($request_url);
curl_setopt($curl,'Content-type: application/json',$csrf_header)); // Accept JSON response
curl_setopt($curl,TRUE);
//curl_setopt($curl,"$session_cookie"); // use the previously saved session
curl_setopt($curl,TRUE);
// Emulate file.
$serialize_args = json_encode($user_data);
    $putData = fopen('php://temp',strlen($serialize_args));
$response = curl_exec($curl);    

curl_close($curl);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读