Avatar billede loopstudio Nybegynder
16. juli 2009 - 00:17 Der er 20 kommentarer

Hvorfor er HTTP_USER_AGENT forvirret?

Hi,

I have a Windows Media Player OBJECT in a HTML page.
In that I refer to a playlist and inside of that I have ASP-links that points to MP3 files.
Its all called from ASP on a IIS server.

I want to check from where the music is being called from with a call to

request.servervariables.item("HTTP_USER_AGENT")

But the strange thing is that it returns DIFFERENT results all the time...
Some times it returns that its called from the IE browser, other times from Windows Media Player:
E.g.:
"Windows-Media-Player"
"NSPlayer"
"WMFSDK"
"MSIE"

And also when I check the IIS logfile:
There seems to be no logic in which one is returned. Nor which order they come in or if all of them or just some of them are present.

Any ideas / explanations?
I want to be able to ensure that the music is called from the right user agent, so they cannot access the music from other agents. For that I believe I need a reliable user_agent return value.
Avatar billede mcb2001 Nybegynder
16. juli 2009 - 08:52 #1
Well, it depends on which application your users use.
It could be an embedded application, played directly in windows media player, played with an extension to Firefox or played in an older version of IE...
So first of, i would explain it with different users with different setups...
Avatar billede loopstudio Nybegynder
16. juli 2009 - 13:15 #2
Hejsa,

Sorry, det var på engelsk, det var fordi jeg kopierede den far et andet forum, men vi kan bare fortsætte på dansk.

Der er kun een bruger og det er mig! Dvs. det er et kontrolleret test-setup, hvor jeg altså kalder nøjagtigt det samme hver gang!
Og jeg gør det fra en Windows XP computer, med IE og WMP embeddd i HTML siden.

Så 1000 krs spørgsmålet går på, hvorfor i himlens navn returnerer den ikke bare WMFSDK "HVER" gang eller "Windows-Media-Player" eller "MSIE" HVER gang?

Når jeg kigger i loggen, så nogle gange er det een af dem. Andre gange en anden, og andre gange igen flere af dem!
Men fælles er at når man liiige tror der er system i det, så falder det til jorden igen forde mønsteret ændrer sig!

Jeg har også checket det med en IF-sætning i koden at den f.eks. KUN måtte spille hvis det var een af dem, men så kunne den kun afspille nogle gange.

Any ideas are welcome! :)
Avatar billede mcb2001 Nybegynder
16. juli 2009 - 13:31 #3
kunne det være at den ene indgang i loggen var når du henter asp linket, den anden når du buffer det, og den sidste når du henter "andet indhold" så som navn på nummer?
Avatar billede loopstudio Nybegynder
16. juli 2009 - 15:56 #4
Du kan måske "halvt" være inde på noget..
Jeg henter nemlig ikke "andet" indhold..

Men altså nummeret BLIVER jo hentet via flg. model

1. ASP
2. --HTML
3. ----WMP EMBED/OBJECT
4. ------PLAYLIST
5. --------ASP
6. ----------MP3

Men altså det er i niveau 5 jeg har et check med en IF-sætning på USER_AGENT vha.

request.servervariables.item("HTTP_USER_AGENT")

Men jeg begriber ikke hvorfor man ikke kan lave et troværdigt check, således at man kan udelukke hentning fra andre steder..?

Hvis jeg bare udelukker een af enten Windows-Media-Player, MSIE eller WMFSDK, så kan den ikke hente lydfilen hver gang fra samme sted nemlig min IE browser!

Og hvad er "NSPlayer" som den også returnerer nogle gange?
Avatar billede mcb2001 Nybegynder
16. juli 2009 - 16:03 #5
jeg aner ikke hvad NSPlayer er, og google var ikke umiddelbart til meget hjælp...

kunne du ikke direkte i din IIS eller Apache server blokkere for andre USER AGENTs?


og så en kommentar - hvorfor blokkere andre???
Avatar billede olebole Juniormester
19. juli 2009 - 13:05 #6
<ole>

Hvordan ser koden ud i dit HTML dokument?

/mvh
</bole>
Avatar billede loopstudio Nybegynder
20. juli 2009 - 00:35 #7
Here it is: :o)

DIM a
a = request.servervariables.item("HTTP_USER_AGENT")
IF (InStr(a, "Windows-Media-Player") > 0) OR (InStr(a, "WMFSDK") > 0) THEN
    Call DownloadFile(strPath)
End If

Private Sub DownloadFile(file)
    Dim strAbsFile
    Dim strFileExtension
    Dim objFSO
    Dim objFile
    Dim objStream

    strAbsFile = file
    Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

    If objFSO.FileExists(strAbsFile) Then
        Set objFile = objFSO.GetFile(strAbsFile)
        Response.Clear
        Response.AddHeader "Content-Disposition", "attachment; filename=" & objFile.Name
        Response.AddHeader "Content-Length", objFile.Size
        Response.ContentType = "audio/mp3"
        Set objStream = Server.CreateObject("ADODB.Stream")
        objStream.Open
        '-- set as binary
        objStream.Type = 1
        '-- load into the stream the file
        objStream.LoadFromFile(strAbsFile)
        '-- send the stream in the response
        Response.BinaryWrite(objStream.Read)
        objStream.Close
        Set objStream = Nothing
        Set objFile = Nothing
    End If
    Set objFSO = Nothing
End Sub

Its working most of the times, but then for some MP3 files, for some strange reason, it wont return the file, and thats because the http_user_agent suddently returns "MSIE" or "NSPlayer".
I have also tried the other way around.. with just checking for "MSIE", but then again, the problem was then just reverse.
Avatar billede loopstudio Nybegynder
20. juli 2009 - 00:42 #8
Jeg har:

Option Explicit
Response.Buffer = TRUE

Øverst over det andet.
Avatar billede olebole Juniormester
21. juli 2009 - 09:23 #9
Det er meget almindeligt, at Media Player identificerer sig selv som NSPlayer og før i tiden som NetShowPlayer. Du kan vel bare spørge på de tre-fire strenge, den kan finde på at returnere
Avatar billede loopstudio Nybegynder
21. juli 2009 - 12:39 #10
Jamen hvis jeg tillader det hele, så tillader jeg jo også at man kan hente det uanset om man henter fra
IE
WMP
eller min (WMP)player indbyggt/embbeded i IE

Og det er jo kun det sidste jeg vil tillade.
IKKE at den kan hentes fra en standalone WMP eller alm. IE browser url.

Der må findes en forklaring et sted for hvorfor den er forvirret og ikke kan returnere den samme streng i alle tilfælde.. når det ovenikøbet er den selvsamme maskininstallation og IE, WMP der kalder programmet hver gang.
Avatar billede mcb2001 Nybegynder
21. juli 2009 - 12:49 #11
hvorfor vil du begrænse folk til dette? pga. reklame indtægter på siden? For i så fald kan du jo bare ligge interaktivt indhold ind på siden. Eller endnu nemmere, bare bruge en flash player istedet, da de er noget sværere at bruge stand-alone....
Avatar billede mcb2001 Nybegynder
21. juli 2009 - 12:50 #12
ikke interaktivt indhold på siden, men på afspilleren - eller endnu nemmere, gøre som DI.fm - ligge hver 10. MP3 som reklame istedet...
Avatar billede olebole Juniormester
21. juli 2009 - 22:09 #13
"Jamen hvis jeg tillader det hele [...]" >> ehhh ... er der nogen, som har opfordret dig til det?
Avatar billede loopstudio Nybegynder
22. juli 2009 - 12:28 #14
Kære venner..

Jeg sætter stor pris på at I kommer med forslag, men vil I ikke gerne holde Jer til emnet.. Hvorfor returnerer HTTP_USER_AGENT forskellige resultater i et fuldstændigt homogent setup?

Jeg er ikke ude i at skulle indlægge reklamer, skifte til Flash eller alt muligt andet pga. ovenstående problematik

På forhånd tak :)
Avatar billede mcb2001 Nybegynder
22. juli 2009 - 12:36 #15
Prøv at høre her - du stiller med en problemstilling, som vi prøver at give den en løsning på!

Wmp vælger givetvis at svare forskellige ting, alt efter for godt befindende. Dette kan du ikke umiddelbart ændre på, da du mener at du har en 100% homogen testopsætning og stadig får variable svar.
Det betyder at du ikke kan løse det problem ved at sikre dig ensartede svar, men derimod bør lede efter en løsning der tager højde for de problemstillinger der er.

Men har du behov for at vide PRÆCIST dette, bør dit spørgsmål være dette og ikke både dette og:
I want to be able to ensure that the music is called from the right user agent, so they cannot access the music from other agents. For that I believe I need a reliable user_agent return value.
Avatar billede olebole Juniormester
22. juli 2009 - 13:03 #16
Opera har i mange år i sin standard opsætning udgivet sig for at være Explorer (i UserAgent) - men også som noget andet, alt efter den opsætning, brugeren har valgt. UserAgent indeholder ikke nødvendigvis det, man forventer  ;o)

Om dit setup er homogent, har vi jo kun din påstand at bedømme udfra. Derfor bad jeg allerede i kommentar #6 om at se dit HTML-dokument, men det har du stadig ikke fundet interessant at fremvise. Man kunne derfor passende spekullere over, hvem det egentlig er, der holder sig til emnet i denne tråd  ;o)

Det er næppe sådan fat, at samme player i samme version af samme browser og på samme platform udgiver sig for noget forskelligt - men uden noget somhelst frontend kode, kan det være svært at gætte sig frem til, hvor årsagen til dine oplevelser skal findes.
Avatar billede loopstudio Nybegynder
23. juli 2009 - 15:17 #17
ok, ok..

OleBole.. Jeg kan se at du skrev "html" kode.

Sorry, jeg så det bare som kode og drog den slutning, at DET du vel måtte være interesseret i at se, var dér hvor checket bliver lavet - altså i ASP-koden, hvor det er at HTTP_USER_AGENT returnerer forskellige svar. Og den gav jeg dig. :)

Jeg kan & kunne ikke se det interessante i andet kode?


Det er jo bare et:

<HTML>
  <OBJECT CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" TYPE="application/x-oleobject">
<PARAM NAME="URL" VALUE="myplaylist.m3u"
<PARAM NAME="type" VALUE="application/x-oleobject">
  </OBJECT>
</HTML>

Men hvis du mener det kan være givtigt i hjælpen at finde årsagen, skal jeg da ikke snyde Jer for det :)

I .m3u filen ligger så henvisninger til ovenstående .ASP fil.

Er det en hjælp? :)
Avatar billede olebole Juniormester
23. juli 2009 - 15:38 #18
Det er denne kode, der implementerer dit player objekt, som sætter User-Agent feltet i HTTP-headeren, så det er såmænd den eneste relevante kode, du kan vise  ;o)

Hvis du er 100% sikker på, de forskellige User-Agents alle bliver sat af samme IE-version på samme maskine, har jeg ikke nogen forklaring.

Hvis jeg var dig, ville jeg afgjort lave en player i Flash. Så ville du undgå dine nuværende problemer og samtidig sørge for, at Mac ejere også kan høre musikken  =)
Avatar billede mcb2001 Nybegynder
23. juli 2009 - 17:09 #19
se svar #11 :-)
Avatar billede olebole Juniormester
23. juli 2009 - 21:44 #20
;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester