2011-01-15 9 views
16

Grazie icktoofay, Ho provato a utilizzare HttpWebRequest e HttpWebResponse.Come scaricare il file utilizzando la classe HttpWebRequest e HttpWebResponse (cookie, credenziali, ecc.)

Quando richiedo l'URL passando le credenziali come UserName e Password.

Riceverò l'ID sessione nella risposta.

Dopo aver ottenuto quell'ID sessione, Come spostarsi ulteriormente.

L'utente autenticato viene tracciato utilizzando le credenziali/i cookie. Sto scaricando l'URL esatto del file e le credenziali. Se vuoi usare i cookie lo farò. Ho bisogno di leggere i dati del file e scrivere/salvarlo in una posizione specificata.

Il codice che sto usando è;

string username = ""; 
string password = ""; 
string reqString = "https://xxxx.com?FileNAme=asfhasf.mro" + "?" + 
      "username=" + username + &password=" + password; 
byte[] requestData = Encoding.UTF8.GetBytes(reqString); 
string s1; 
CookieContainer cc = new CookieContainer(); 

var request = (HttpWebRequest)WebRequest.Create(loginUri); 
request.Proxy = null; 
request.CookieContainer = cc; 
request.Method = "POST"; 
HttpWebResponse ws = (HttpWebResponse)request.GetResponse(); 
Stream str = ws.GetResponseStream(); 
//ws.Cookies 
//var request1 = (HttpWebRequest)WebRequest.Create(loginUri); 
byte[] inBuf = new byte[100000]; 
int bytesToRead = (int) inBuf.Length; 
int bytesRead = 0; 
while (bytesToRead > 0) 
{ 
    int n = str.Read(inBuf, bytesRead,bytesToRead); 
    if (n==0) 
    break; 
    bytesRead += n; 
    bytesToRead -= n; 
} 
FileStream fstr = new FileStream("weather.jpg", FileMode.OpenOrCreate, 
            FileAccess.Write); 
fstr.Write(inBuf, 0, bytesRead); 
str.Close(); 
fstr.Close(); 

risposta

20

Questo è come lo faccio:

const string baseurl = "http://www.some......thing.com/"; 
CookieContainer cookie; 

Il metodo primi dati di accesso al server web e ottiene Session ID:

public Method1(string user, string password) { 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(baseurl); 

    req.Method = "POST"; 
    req.ContentType = "application/x-www-form-urlencoded"; 
    string login = string.Format("go=&Fuser={0}&Fpass={1}", user, password); 
    byte[] postbuf = Encoding.ASCII.GetBytes(login); 
    req.ContentLength = postbuf.Length; 
    Stream rs = req.GetRequestStream(); 
    rs.Write(postbuf,0,postbuf.Length); 
    rs.Close(); 

    cookie = req.CookieContainer = new CookieContainer(); 

    WebResponse resp = req.GetResponse(); 
    resp.Close(); 
} 

L'altro metodo ottiene il file dal server:

string GetPage(string path) { 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(path); 
    req.CookieContainer = cookie; 
    WebResponse resp = req.GetResponse(); 
    string t = new StreamReader(resp.GetResponseStream(), Encoding.Default).ReadToEnd(); 
    return IsoToWin1250(t); 
} 

Nota che ritorno t lui pagina come stringa. Probabilmente sarebbe meglio restituirlo come byte [] per salvare su disco. Se i file jpeg sono piccoli (di solito non hanno dimensioni di gigabyte), puoi semplicemente metterli nello stream di memoria e quindi salvarli sul disco. Ci vorranno 2 o 3 linee semplici in C#, e non 30 righe di codice difficile con potenziali perdite di memoria pericolose come hai fornito sopra.

+0

Grazie, sì, ho provato il primo metodo e ottenuto il cookie come ID sessione e quando assegno la raccolta cookie alla nuova richiesta Web e provo a richiedere l'URL del file iehttps: //ghasghfh/filename=hasfhgfhg.mro . Quando cerco di ottenere la risposta nel modulo stringa. I valori di stringa che ottengo sono il codice HTML/ViewSource della pagina di accesso. Per favore, rispondimi ... apprezzo molto il tuo aiuto. – Vinay

+0

Significa che hai eseguito correttamente il download della pagina web, ma non hai passato correttamente login e password. Il mio esempio (vedi la riga con il comando string.Format) usa un formato di POST, che ho visto sul server con php dove volevo usare il mio codice. Ho iniziato con il plugin per Firefox che mostra tutte le comunicazioni con il server, e poi ha fatto lo stesso nel mio codice. E funziona. –

+0

Al Kepp, U r giusto, sono in grado di scaricare l'HTML del file con successo. qualsiasi suggerimento in cui il problema/problema persiste. C'è qualche ulteriore cura da prendere. – Vinay

Problemi correlati