2010-12-06 5 views
6

Dies ist alles interne Server und Software, so dass ich sehr auf meine Optionen beschränkt bin, aber das ist, wo ich bin. Dies ist bereits ein Hilfsmittel für einen Workaround, aber ich habe keine andere Wahl, also versuche ich nur, es zum Laufen zu bringen.Probleme beim Lesen der Header-Werte in klassischen ASP

Ich habe eine einfache ASP-Datei auf meinem Server, die durch einen Dienst geschützt ist, der die Benutzerauthentifizierung behandelt (ich habe keine Kontrolle über diesen Dienst). Wenn ein Benutzer diese ASP-Datei besucht, müssen sie sich über den Dienst authentifizieren, und der Dienst leitet sie dann an die ASP-Datei weiter.

Der Dienst fügt benutzerdefinierte Werte in den http-Header ein, mit denen ich identifizieren kann, wer sich angemeldet hat (ich brauche es weiter unten). Wenn ich die asp verwenden, um die Werte ALL_RAW und ALL_HTTP aus der Kopfzeile anzuzeigen, kann ich alle benutzerdefinierten Werte anzeigen. Aber wenn ich versuche, diese Werte spezifisch zu nennen, bekomme ich nichts.

lief ich diese einfache Schleife:

<% 
for each x in Request.ServerVariables 
    response.write("<B>" & x & ":</b> " & Request.ServerVariables(x) & "<p />") 
next 
%> 

und alle Tasten Anzeige der benutzerdefinierten diejenigen darunter. Aber keiner der benutzerdefinierten Werte wird. Die Werte sind der Teil, den ich brauche.

das einzige, was ich an den benutzerdefinierten Werten einzigartig finde, ist, dass sie im ALL_RAW-Wert etwas anders aussehen, aber sie sehen alle in der ALL_HTTP korrekt aus. Soweit ich das beurteilen kann, sind sie korrekt formatiert. Die einzigen Formatierungsunterschiede zwischen den Standard- und benutzerdefinierten Werten sind Groß- und Kleinschreibung und Unterstriche anstelle von Bindestrichen.

Warum kann ich diese benutzerdefinierten Werte nicht lesen?

+1

Es kann sein, dass der fragliche Dienst die Codierung falsch einrichtet oder ein Null-Byte oder ein anderes unsichtbares Zeichen einfügt, das die Analyse verschleiert.Oder es kann sein, dass der Dienst zu spät in die Header gelangt. –

Antwort

1

Aus Gründen der Zweckmäßigkeit, warum nicht einfach Request.ServerVariables ("ALL_RAW") selbst analysieren?

+0

Eigentlich habe ich diese Frage gestellt und dann genau das gemacht. Außer ich versuchte ALL_HTTP zu parsen. Aber Sie können anscheinend nicht einfach ALL_HTTP parsen. Es wird nicht auf vbCrLf aufgeteilt. Aber bei Ihrer Erwähnung habe ich versucht, ALL_HTTP durch ALL_RAW zu ersetzen, und es wird sich auf vbCrLf teilen, also ist das die Richtung, in die ich gehe. – MitchelWB

12

Ich fand meine Antwort.

Als ich diese Schleife lief

<% 
for each x in Request.ServerVariables 
    response.write("<B>" & x & ":</b> " & Request.ServerVariables(x) & "<p />") 
next 
%> 

es wäre eine Liste aller Namen zurück, die im Header und deren Werte waren. Der benutzerdefinierte Wert, nach dem ich gesucht habe, würde als Name "HTTP_CUSTOM_ID" angezeigt und ich könnte es sehen, mit seinem Wert in den ALL_HTTP und ALL_RAW, aber wenn ich versuchte, diesen spezifischen Wert zu ziehen, würde es eine leere Zeichenfolge zurückgeben. Die Lösung, die ich zufällig auf (von im Gespräch mit jemandem anderem hier bei der Arbeit, die in einer ähnlichen Situation mit dem gleichen Dienst gegangen war ich aufnehmen wollte, ist zu verwenden:

<%=Request.ServerVariables("HEADER_CUSTOM_ID")%> 

Wenn die vollständigen Header sehen, nichts führte mich Um das HEADER-Präfix anstelle von HTTP zu verwenden, führte es mich in die entgegengesetzte Richtung, und ich fand nirgendwo eine Erwähnung davon, also suche ich meine eigene Antwort auf meine Frage, also ist es im Internet.

+1

Das hat mir heute wirklich geholfen. Ich musste an einem wirklich alten Projekt arbeiten. Vielen Dank. – jessegavin

+2

Im Interesse der Dokumentation erwähnt die MSDN-Seite für [IIS-Servervariablen] (http://msdn.microsoft.com/en-us/library/ms524602%28VS.90%29.aspx) das Präfix HEADER_ und [ diesen Blogpost] (http://blogs.msdn.com/b/david.wang/archive/2006/04/20/howto-retrieve-request-headers-using-isapi-asp-and-asp-net.aspx) geht in einige Details darüber, warum es notwendig ist. (Zusammenfassung: Die CGI-Spezifikation besagt, dass "HTTP_" Unterstriche durch Gedankenstriche ersetzen sollte, also ist "ALL_RAW" ohne "HEADER_" die einzige Möglichkeit, Variablen mit Unterstrichen in ihren Namen zu finden.) –

+0

Danke, das hat mir sehr geholfen – drew630

0

Es gibt einen besseren Weg, als jedes Element selbst Parsen. in Request.ServerVariables("ALL_HTTP") bei den Werten suchen und den Header Sie müssen aber den Namen etwas anders finden.

Alle HTTP-Header beginnen mit HTTP_. Ich suchte nach If-None-Match und es war in der Sammlung als HTTP_IF_NONE_MATCH. Um den Wert zu erhalten, benutzte ich Request.ServerVariables("HTTP_IF_NONE_MATCH").

Verwandte Themen