C#, Ladda hem fil från hemsida automatiskt

Permalänk
Medlem

C#, Ladda hem fil från hemsida automatiskt

Tjenare, är ute på lagom djupt vatten och vet inte riktigt vad jag ens ska googla på för att komma helt rätt...

Målet är att ladda ner en fil från en hemsida, en fil som jag får tag i genom denna adressen:

http://[intranät]/GetFile.aspx?fileID=3053123&Checkout=False&...

Så det är väll då ingen adressen till själva filen, utan till aspx som går in i databas och plockar fram filen åt mig...
Klistrar jag in adressen i Chrome så kommer jag ingenstans, klistrar jag in i IE så får jag upp "What do you want to do with 03053123.xlsm..-"dialogen, så det är väll nån autentisering som följer med min windowsanvändare som bara IE fattar...

Filen heter alltid 03053123.xlsm

Jag har testat med ett gäng olika varianter av WebRquest och castat till HttpWebRequest och olika .ContentType, UseDefaultCredentials men det slutar alltid med
"The remote server returned an error: (403) Forbidden."

Kör jag med ett WebBrowser-object så kan jag navigera till adressen, men då fastnar hela automatiken på at jag ändå får upp dialogrutan för att spara filen...fast, nu när jag satt och skrev detta så gjorde jag en extra google och fick fram en del om IDownloadManager som verkar kunna fixa så det går att autoladda ner filen. Ex. http://stackoverflow.com/questions/13362922/windows-forms-web... var ju exemplariskt, kanske, inte testat ännu..

Så då blir frågan, är det IDownloadManager-vägen som måste vandras, eller finns det något annat smart sätt?

Permalänk
Medlem

Du får använda WebClient ifall du vill skicka över Microsofts credentials. Denna klass använder mer eller mindre Internet Explorer som är en av de få webläsarna som default stödjer detta.

WebClient c = new WebClient { UseDefaultCredentials = true };

http://msdn.microsoft.com/en-us/library/system.net.webclient....

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 5090
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck, Rog Ally + de fiesta konsoler.

Permalänk
Medlem

MugiMugi: Det ger ändå (403) Forbidden, testade med DownloadData- och DownloadFile-metoderna.

Ligger inte problemet i att ovan prövade metoder försöker ladda ner själva, öh, kan fasiken inte terminologin för sådanthär..själva aspx-objectet, istället för filen som den ska lämna ifrån sig?

Permalänk
Medlem
Skrivet av hemmafru:

MugiMugi: Det ger ändå (403) Forbidden, testade med DownloadData- och DownloadFile-metoderna.

Ligger inte problemet i att ovan prövade metoder försöker ladda ner själva, öh, kan fasiken inte terminologin för sådanthär..själva aspx-objectet, istället för filen som den ska lämna ifrån sig?

Kan detta vara något:
http://stackoverflow.com/questions/11749676/download-file-thr...

Vet inte riktigt om det hjälper då 403 levereras från servern. Men om det är en redirect så måste man nog tillåta det annars bör orginalfilen laddas ner (aspx).

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av hemmafru:

MugiMugi: Det ger ändå (403) Forbidden, testade med DownloadData- och DownloadFile-metoderna.

Ligger inte problemet i att ovan prövade metoder försöker ladda ner själva, öh, kan fasiken inte terminologin för sådanthär..själva aspx-objectet, istället för filen som den ska lämna ifrån sig?

Nej, den försöker ladda ner informationen den får ifrån aspx objektet, får du en redirect gör den det med o.s.v.

Ditt problem är antingen att er webbservern inte är rätt konfigurerad för att hantera Windows credientials korrekt, vad jag skulle rekommendera är att testa tre olika saker.

Yttligare ett sätt att tvinga med cridentials

WebRequest request = (HttpWebRequest)WebRequest.Create("Adress att tanka ner"); request.Credentials = new NetworkCredential("username", "password"); var response = request.GetResponse();

#2 skicka samma som ovan fast i URL'n ( mindre säkert )

#3 ta reda på hur servern identifierar en användare. Te.x cookies och gör samma sak i kod.
För att ta redat på detta så använd IE som vanligt och ha detta program uppe
http://www.telerik.com/fiddler
Så kan du lättare se hur det fungerar.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 5090
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck, Rog Ally + de fiesta konsoler.

Permalänk
Medlem

Okay, körde in Fiddler och försökte förstå något, under Inspectors - Headers så hittade jag Cookies / Login. Där fanns dels ett par google cookies, _utma, _utmz osv. och så en som hetter SIProArcAuth som verkade riktigt bra.

Jag tog och la till en cookie i webrequesten, och kopierade allt från SIProArcAtuth, och nu stannar det hela på "Cannot handle redirect from HTTP/HTTPS protocols to other dissimilar ones.."

Framgångar, fy va trevligt!

Läste runt lite mer i Fiddler, och grejer är visst att filen skapas på nätverket, och sedan skapas en enkel sida med en redirect till filen, via länken: file://server.server/.../.../03053123.xlsm

Så bara att läsa in det svar som kommer och plocka sökvägen, så blev det tipptopp

Tackar så mycket!

Måste jag läsa på hur länge den där coockien finns och lever...fasiken, kan inget om kakor