it-swarm.com.de

Verwenden von PHP cURL zum Senden einer http get-Anfrage

Ich kann die HTTP-GET-Anforderung mit cURL in meiner benutzerdefinierten Funktion ausführen. Der folgende Code funktioniert für mich einwandfrei. Gibt es jedoch eine Drupal Möglichkeit, dies zu tun?

function some_page_callback() {
    $url = 'https://api.example.com/data';
    $accesstoken = 'SoMedGFidHThX2NvdW50eV90bWNhOkEyakJEM2ND';
    $headr = array();
    $headr[] = 'Accept: application/json';
    $headr[] = 'Authorization: Basic '.$accesstoken;

    //cURL starts
    $crl = curl_init();
    curl_setopt($crl, CURLOPT_URL, $url);
    curl_setopt($crl, CURLOPT_HTTPHEADER,$headr);
    curl_setopt($crl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($crl, CURLOPT_HTTPGET,true);
    $reply = curl_exec($crl);

    //error handling for cURL
    if ($reply === false) {
       // throw new Exception('Curl error: ' . curl_error($crl));
       print_r('Curl error: ' . curl_error($crl));
    }
    curl_close($crl);
    //cURL ends

    //decoding the json data
    $decoded_data = json_decode($reply, true);


    // putting the data into table 
      $rows = array();

      $output = '';
      // Example of theme_table().
      $output .= '<h2>Example</h2>';
      $headers = array(t('ID'), t('Name'));

      foreach ($decoded_data['data'] as $line) {
          $tablerow = array(
          array('data' => $line['id']),
          array('data' => $line['name']),
         );
          $rows[] = $tablerow;
      }
      $output .= theme('table', array('header' => $headers, 'rows' => $rows));

return $output;
}
1
shrish

So etwas musste ich vor nicht allzu langer Zeit in einem benutzerdefinierten Modul tun. Drupal hat eine Funktion namens drupal_http_request () , um die externe URL zu treffen. Sie können sie bei Bedarf in einer Hook-Funktion in Ihrem Modul ausführen.

$url = 'http://my-url.com';
      $response = drupal_http_request($url);
2
Jon Girard

Das Äquivalent in Drupal 8 wäre der Guzzle HttpClient, wie durch diesen Datensatz ändern dokumentiert

try {
  $response = \Drupal::httpClient()->request('GET', $url);
  $data = $response->getBody()->getContents();

  //if dealing with json file
  $decoded = json_decode($data);
  if (!$decoded) {
    throw new \Exception('Invalid data returned from API');
  }

} catch (\Exception $e) {
  return "";
}
0
GiorgosK