# Wie REST-API-Anfragen loggen?

**URL:** <https://forum.shopware.com/t/wie-rest-api-anfragen-loggen/29029>\
**Category:** Programmierung\
**Created:** [22. Juli 2015 um 09:15 UTC](https://forum.shopware.com/t/wie-rest-api-anfragen-loggen/29029 "2015-07-22T09:15:58Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ludwig](https://avatars.discourse-cdn.com/v4/letter/l/43a26b/32.png) [@Ludwig](https://forum.shopware.com/u/Ludwig)\
**Post date:** [22. Juli 2015 um 09:15 UTC](https://forum.shopware.com/t/wie-rest-api-anfragen-loggen/29029/1 "2015-07-22T09:15:58Z")

</div>

Hallo zusammen, gibt es ein Plugin das die Anfragen/Antworten per REST-API speichert? Wo kann man am besten eine LOG-Funktion(Speichern in eine Datei) einfügen? Oder wie kann man am besten Schnittstellenprobleme analysieren? Grüße Ludwig

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [22. Juli 2015 um 09:37 UTC](https://forum.shopware.com/t/wie-rest-api-anfragen-loggen/29029/2 "2015-07-22T09:37:04Z")

</div>

Hi, du kannst dich einfach auf Enlight\_Controller\_Action\_PreDispatch\_Api registrieren, dann wirst du vor jedem Request “benachrichtigt”. Dort könntest du dir dann auch alle Anfrage-Daten aus $args-\>getSubject()-\>Request()-\>getParams() oder -\>getPost() ziehen. Zum Loggen einfach den Monologger nehmen: [https://developers.shopware.com/develop … g/#monolog](https://developers.shopware.com/developers-guide/debugging/#monolog) Gruß, Daniel

---

<div class="post-metadata">

**Author:** ![Ludwig](https://avatars.discourse-cdn.com/v4/letter/l/43a26b/32.png) [@Ludwig](https://forum.shopware.com/u/Ludwig)\
**Post date:** [22. Juli 2015 um 10:06 UTC](https://forum.shopware.com/t/wie-rest-api-anfragen-loggen/29029/3 "2015-07-22T10:06:57Z")

</div>

Hallo Daniel, prima, danke für die schnelle Antwort. Gibt es auch eine Möglichkeit die Antwort zu dem Request zu speichern? Grüße Ludwig

---

<div class="post-metadata">

**Author:** ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)\
**Post date:** [23. Juli 2015 um 00:08 UTC](https://forum.shopware.com/t/wie-rest-api-anfragen-loggen/29029/4 "2015-07-23T00:08:33Z")

</div>

Dafür müsstest du dich beim PostDispatch einhooken und via $args-\>getSubject()-\>View()-\>getAssign() die Daten holen

---

<div class="post-metadata">

**Author:** ![Ludwig](https://avatars.discourse-cdn.com/v4/letter/l/43a26b/32.png) [@Ludwig](https://forum.shopware.com/u/Ludwig)\
**Post date:** [23. Juli 2015 um 13:18 UTC](https://forum.shopware.com/t/wie-rest-api-anfragen-loggen/29029/5 "2015-07-23T13:18:29Z")

</div>

@Shyim: Danke für die Info. Hätt ich mit RTFM auch rausfinden können.:oops: Wird der Controller auch aufgerufen wenn die Authentifizierung per HTTP-Request nicht erfolgreich war? Kann ich so herausfinden ob jemand mit falschen Zugangsdaten zugreifen wollte, bzw. wenn die Authentifizierung per Auth-Digest nicht korrekt übermittelt wird? Grüße Ludwig

---

<div class="post-metadata">

**Author:** ![waldicom](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/waldicom/32/12881_2.png) [@waldicom](https://forum.shopware.com/u/waldicom)\
**Post date:** [23. Juli 2015 um 13:57 UTC](https://forum.shopware.com/t/wie-rest-api-anfragen-loggen/29029/6 "2015-07-23T13:57:00Z")

</div>

Nein, der Controller wird nicht aufgerufen, wenn die Authentifizierung per HTTP-Request nicht erfolgreich war bzw es wird der die invalidAction() des Controllers api/Index aufgerufen

---

<div class="post-metadata">

**Author:** ![Ludwig](https://avatars.discourse-cdn.com/v4/letter/l/43a26b/32.png) [@Ludwig](https://forum.shopware.com/u/Ludwig)\
**Post date:** [23. Juli 2015 um 13:58 UTC](https://forum.shopware.com/t/wie-rest-api-anfragen-loggen/29029/7 "2015-07-23T13:58:32Z")

</div>

Was mich hier etwas verwirrt ist der Zugang zur API. Ich habe den Beipielcode für das PHP-Interface genutzt und erfolgreich eine Verbindung zum Shop aufgebaut. Im Code sehe ich: `public function \_\_construct($apiUrl, $username, $apiKey) { $this-\>apiUrl = rtrim($apiUrl, '/') . '/'; //Initializes the cURL instance $this-\>cURL = curl\_init(); curl\_setopt($this-\>cURL, CURLOPT\_RETURNTRANSFER, true); curl\_setopt($this-\>cURL, CURLOPT\_FOLLOWLOCATION, true); curl\_setopt($this-\>cURL, CURLOPT\_HTTPAUTH, CURLAUTH\_DIGEST); curl\_setopt($this-\>cURL, CURLOPT\_USERPWD, $username . ':' . $apiKey); curl\_setopt($this-\>cURL, CURLOPT\_HTTPHEADER, array( 'Content-Type: application/json; charset=utf-8', )); }` Also steht hier was von CURLAUTH\_DIGEST. Oder sehe ich das falsch? Wenn ich nun zum Gegenstück in Shopware grabe lande ich bei: \engine\library\Zend\Http\Client.php ` public static function encodeAuthHeader($user, $password, $type = self::AUTH\_BASIC) { $authHeader = null; switch ($type) { case self::AUTH\_BASIC: // In basic authentication, the user name cannot contain ":" if (strpos($user, ':') !== false) { /\*\* @see Zend\_Http\_Client\_Exception \*/ require\_once 'Zend/Http/Client/Exception.php'; throw new Zend\_Http\_Client\_Exception("The user name cannot contain ':' in 'Basic' HTTP authentication"); } $authHeader = 'Basic ' . base64\_encode($user . ':' . $password); break; //case self::AUTH\_DIGEST: /\*\* \* @todo Implement digest authentication \*/ // break; default: /\*\* @see Zend\_Http\_Client\_Exception \*/ require\_once 'Zend/Http/Client/Exception.php'; throw new Zend\_Http\_Client\_Exception("Not a supported HTTP authentication type: '$type'"); } return $authHeader; } ` Hier steht es funktioniert nur Basic und kein Digest. Bin ich da an der falschen Stelle? Wo wird die Authentifizierung gemacht? Grüße Ludwig

---

<div class="post-metadata">

**Author:** ![Ludwig](https://avatars.discourse-cdn.com/v4/letter/l/43a26b/32.png) [@Ludwig](https://forum.shopware.com/u/Ludwig)\
**Post date:** [23. Juli 2015 um 17:05 UTC](https://forum.shopware.com/t/wie-rest-api-anfragen-loggen/29029/8 "2015-07-23T17:05:58Z")

</div>

OK, habs selbst gefunden. Anscheinend wird das nun in \engine\library\Zend\Auth\Adapter\Http\http.php gemacht. Ich hätte gerne den Fehler bei der Authentifizierung per Mail zugeschickt. Vermutlich muss ich das für Tests hart in die Source einfügen. Oder hat da jemand eine Idee? Grüße Ludwig

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [23. Juli 2015 um 18:40 UTC](https://forum.shopware.com/t/wie-rest-api-anfragen-loggen/29029/9 "2015-07-23T18:40:30Z")

</div>

Hi, dass die Authentifizierung nicht erfolgreich war, siehst du an der Meldung: `{"success":false,"message":"Invalid or missing auth"}` Von daher brauchst du so tief in das System gar nicht einsteigen. Daniel

---

<div class="post-metadata">

**Author:** ![Ludwig](https://avatars.discourse-cdn.com/v4/letter/l/43a26b/32.png) [@Ludwig](https://forum.shopware.com/u/Ludwig)\
**Post date:** [24. Juli 2015 um 17:49 UTC](https://forum.shopware.com/t/wie-rest-api-anfragen-loggen/29029/10 "2015-07-24T17:49:00Z")

</div>

Hallo Daniel, danke für die Info. Wenn ich das richtig verstehe besteht doch der Beginn der Kommunikation, per HTTP-Request mit DIGEST gesichert, mit „GET /api/version“ und wird mit 401 vom Server quittiert und quasi abgelehnt. Dann wird die Abfrage erneut gesendet und nach Erfolg mit 200 und den Versionsinfos quittiert oder nach z.B. falschem Passwort mit der Nachricht die Du geschrieben hast und erneut 401. Wir haben bei einem REST-Client den Fall das der zweite Request nicht gesendet wird. Da tappe ich gerade im Dunkeln warum. Leider habe ich keinen Zugriff auf den REST-Client sondern sitze am Webserver und somit nur auf der Shopware-Seite. Hast Du eine Idee was ich da prüfen kann? Ich wollte auf der unteren Kommunikationsebene sehen was da überhaupt im ersten Request ankommt. Da gibt es ja nebem dem Login und dem Kennwort noch andere Parameter. Vielleicht passt da was nicht. Hat jemand eine andere Idee? Grüße Ludwig
