2016-04-24 6 views
0

Ich schreibe ein CGI-Skript (Perl auf Apache, kein anderes Framework), das ein Webhook-Endpunkt sein soll. Die technischen Details sind, dass es Ereignisse von einem Shopify-Shop erhalten soll, aber das ist halb irrelevant. Shopify teilt mir mit, dass ich, um zu überprüfen, dass der Webhook von ihnen stammt, den HMAC mit einem geheimen Schlüssel berechnen muss, den sie bereitstellen, und sicherstellen, dass er mit dem Wert in der Kopfzeile X-SHOPIFY-HMAC-SHA256 übereinstimmt. Ich habe requestb.in verwendet, um den Webhook zu betrachten, wie er gesendet wird, und ich kann überprüfen, dass der HTTP-Client, den sie verwenden, den X-Header sendet.Mein CGI-Skript erhält keine benutzerdefinierten Header

Wenn jedoch mein CGI-Skript läuft, bekomme ich nur die Bog-Standard-Header. X-SHOPIFY-HMAC-SHA256 wird weder im Perl-CGI-Modul noch in den Umgebungsvariablen %ENV gefunden. (Ich lese How do I access the HTTP Header of request in a CGI script? und How to fetch HTTP headers in perl when using CGI)

Ich benutze cgiwrap, um mein Skript zusätzliche Rechte zu erhalten, aber das sollte mich nicht davon abhalten, die Header richtig zu sehen?

+1

Welche Webserver oder Rahmen verwenden Sie? – Sebastian

+0

Einfach nur Perl auf Apache, kein Framework. – AnotherParker

Antwort

2

Plain Apache legt Umgebungsvariablen für HTTP-Header fest. Probieren Sie es zuerst ohne Wrapper aus. Vielleicht haben Sie auch printenv.cgi versuchen:

#!/usr/bin/perl 
use Data::Dumper; 

print "Content-type: text/plain\r\n\r\n".Dumper(\%ENV); 

Anruf printenv oder Ihr Skript manuell zu überprüfen, ob der Anrufer das Problem verursachen könnten:

curl -H "Foo: Bar" http://localhost/cgi-bin/printenv.cgi 

Sie auch in eine Datei auszugeben möchten, ob Ihr Skript zu sein, ist aufgerufen als API.

Siehe auch http://httpd.apache.org/docs/current/howto/cgi.html

+0

Danke, das ist sehr hilfreich. Lokale Anfragen scheinen zu funktionieren. – AnotherParker

+0

Nicht sicher, was es war, aber das half mir, es aufzuspüren. Vielleicht ein Unterstrich/Bindestrich. – AnotherParker

+1

Auch ich würde text/plain anstelle von text/html als Content-Typ verwenden. – AnotherParker

Verwandte Themen