Frage

Ich bin neu in Drupal. Mein Ziel ist es, es für die Mitarbeiter zu verwenden, um ihre eigenen Inhalte zu verwalten, und dann ihre Inhalte von Knoten über Ruhe auf die vorhandene öffentliche Website abzurufen.

Unter Verwendung von Drupal 7.10, Diensten 3. Drupal liegt in einem Unterverzeichnis, nicht an der Standortwurzel, falls dies ankommt. Für den Restserver wurde ein Endpunkt namens "Rest" erstellt. Anonymous Access ist nicht wünschenswert, daher wurde ein Drupal -Benutzer für authentifizierte Zugriffsanforderungen erstellt.

Ich baue einen PHP -Kunden basierend auf Ein Beitrag von Michaelcole Für den Auth -Zugriff. Es scheint mit dem Restserver zu sprechen, da ich zuerst unser Drupal -Site -Thema zusammen mit einem Drupal -Fehler auf meiner generischen PHP -Seite gesehen habe.

Zu diesem Zeitpunkt versuche ich nur, mich als meinen Servicebenutzer anzumelden, sodass nur der Code login.php auf meiner Seite ausgeführt wird.

PHP gibt dies zurück:

Antwort: String (0) "" Fatal ERROR: Uncornt Exception 'Exception' mit Meldung 'String konnte nicht als XML' in /path-to-my-page/test-drupal-rest.php:36 Stack Trace: # analysiert werden. 0 /Path-to-My-Page /Test- Drupal-rest.php (36): SimplexMlelement-> __ Konstrukt ('') #1 {main}, die in /path-to-my- Seite /test-drupal-rest geworfen werden .php in Zeile 36

Zeile 36 ist:

$xml = new SimpleXMLElement($response);

Wenn ich nur die Full -Service -URL in meinen Browser stecke ( http://www.mydomain.com/drupal-folder/rest/user/login.xml ), Ich bekomme (XML mit Leerzeichen für die Anzeige hier):

<? xml Version = "1.0" coding = "utf-8"?> <Ergebnis/>

Ich habe keine Ideen mehr. Kannst du helfen?

Bearbeiten/Update: Ich bin in die Verwaltung »Struktur» Dienste gegangen und stellte fest, dass "Anwendung/x-www-form-rencoded" unter Anfrage an der Anfrage deaktiviert war. Ich habe das aktiviert und meine Anfragen machten sich durch. Obwohl es offensichtlich mein Benutzerauth erkennt, kann ich einen Knoten nicht abrufen.

=====================

Bearbeiten/Update 2012-01-16 15:10: Hier ist mein aktueller Code, basierend auf Michaelcole's Code und für meinen Workflow und mein Ziel geändert. Es wird nicht den Knoteninhalt abgerufen. Der Fehler scheint irgendwo in der Sendung der Sitzungsauthentifizierung mit der Knotenanforderung zu sein. Die Anmeldung funktioniert immer richtig und ich erhalte immer mein XML -Benutzerobjekt.

loginToDrupal();

$service_url = "http://mysite.com/drupal-folder/resttest/node/10.xml";

$session_cookie = file_get_contents('session_cookie.txt');

print "Ready to send cURL to $service_url";

// set up the request
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // have curl_exec return a string
curl_setopt($curl, CURLOPT_COOKIE, "$session_cookie"); // use the previously saved session
curl_setopt($curl, CURLOPT_HTTPGET, true); //do a GET ^^^^added by me...
curl_setopt($curl, CURLOPT_VERBOSE, true); // output to command line

$response = curl_exec($curl);
curl_close($curl);
print "\n<br />RESPONSE:\n";
var_dump($response);

logoutOfDrupal();

//=======================================================================


function loginToDrupal()
    {
    $service_url = 'http://www.mysite.com/drupal-folder/rest/user/login.xml'; // .xml asks for xml data in response
    $post_data = array(
          'username' => 'myusername',
          'password' => 'mypass',
        );
    $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, CURLOPT_RETURNTRANSFER, true);  // have curl_exec return a string
    curl_setopt($curl, CURLOPT_POST, true);             // do a POST
    curl_setopt($curl, CURLOPT_POSTFIELDS, $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);
    print "\n<br />RESPONSE:\n";
    var_dump($response);

    // parse the response
    $xml = new SimpleXMLElement($response);
    $session_cookie = $xml->session_name .'='. $xml->sessid;

    file_put_contents('session_cookie.txt', $session_cookie);

    if($xml->sessid!="")
        {
        print "login successful, session $xml->sessid <br />";
        }
    else
        {
        print "Login appears to have failed.";
        }
    }

//========================================================================================

function logoutOfDrupal()
    {
    print "\n<br />Logging out...<br />";
    $service_url = 'http://mysite.com/drupal-folder/rest/user/logout';
    $session_cookie = file_get_contents('session_cookie.txt');

    // set up the request
    $curl = curl_init($service_url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // have curl_exec return a string
    curl_setopt($curl, CURLOPT_COOKIE, "$session_cookie"); // use the previously saved session
    curl_setopt($curl, CURLOPT_POST, true);             // do a POST
    curl_setopt($curl, CURLOPT_POSTFIELDS, ""); // POST this data

    // make the request
    curl_setopt($curl, CURLOPT_VERBOSE, true); // output to command line
    $response = curl_exec($curl);
    curl_close($curl);
    print "\n<br />RESPONSE:\n";
    var_dump($response);
    print "\n<br />reached end of function logoutOfDrupal()<br />";
    }

Der Debug -Print -Anruf nach der Funktion Logintodrupal () gibt XML immer wie folgt zurück:

< ?xml version="1.0" encoding="utf-8"? >< result >< sessid >AU7yWNWPXxORI2DsdJVegdreg2F9rYQxy90dAB5px2s< /sessid >< session_name >SESSd9af11d86664849a8dcda2d6c4af3580< /session_name >< user >< uid >11< /uid >< name >myuser< /name >< mail >me@mysite.com< /mail >< theme >< /theme >< signature >< /signature >< signature_format >filtered_html< /signature_format >< created >1326401726< /created >< access >1326746687< /access >< login >1326748351< /login >< status >1< /status >< timezone >America/Denver< /timezone >< language >< /language >< picture/ >< init >me@mysite.com< /init >< data >< contact >1< /contact >< /data >< roles is_array="true" >< item >authenticated user< /item >< /roles >< rdf_mapping >< rdftype is_array="true" >< item >sioc:UserAccount< /item >< /rdftype >< name >< predicates is_array="true" >< item >foaf:name< /item >< /predicates >< /name >< homepage >< predicates is_array="true" >< item >foaf:page< /item >< /predicates >< type >rel< /type >< /homepage >< /rdf_mapping >< /user >< /result >

Obwohl es eindeutig ein erfolgreiches Benutzerobjekt zurückgibt, gibt der obige Code jedes Mal, wenn ich versuche, den Knoten abzurufen, eine leere XML -Zeichenfolge zurück.

War es hilfreich?

Lösung

Heute habe ich ein einfaches Problem mit meinem Beispielcode entdeckt: Im Retrieval der Knoten ist die URL:

$service_url = "http://mysite.com/drupal-folder/resttest/node/10.xml";

Während in der Anmeldungsfunktion es ist:

$service_url = 'http://**www**.mysite.com/drupal-folder/rest/user/login.xml';

Ich habe es so geändert, dass alle URLs auf www.mysite.com verweisen, und ich kann jetzt einen Knoten als authentifiziertes Benutzer abrufen.

Andere Tipps

Sie sagen also, dass Sie sich als Benutzer richtig angemeldet haben. Welche Auth -Methode verwenden Sie? Sitzungsauthentifizierung? In diesem Fall sollte die Anmeldeantwort ein Benutzerobjekt zurückgeben, von dem Sie die Sessid nehmen müssen, es auf Ihrer Anwendung/anderen Website/anderen Kunden speichern und verwenden, wenn Sie einen Knoten abrufen müssen. Sie müssen den Sessid als einen anderen Parameter in Ihrem Knoten abrufen, der die Anforderung neben dem NID abruft (ja, jedes Mal).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit drupal.stackexchange
scroll top