2011-01-15 8 views
16

धन्यवाद icktoofay, मैंने HttpWebRequest और HttpWebResponse का उपयोग करने का प्रयास किया।HttpWebRequest और HttpWebResponse क्लास (कुकीज़, प्रमाण पत्र, आदि) का उपयोग कर फ़ाइल को डाउनलोड करने के लिए कैसे करें

जब मैं उपयोगकर्ता नाम और पासवर्ड जैसे प्रमाण पत्र पास करके यूआरएल के लिए अनुरोध करता हूं।

मुझे प्रतिक्रिया में सत्र आईडी वापस मिल जाएगा।

उस सत्र आईडी प्राप्त करने के बाद, आगे कैसे बढ़ें।

प्रमाणीकृत उपयोगकर्ता को प्रमाण-पत्र/कुकीज़ का उपयोग करके ट्रैक किया जाता है। मुझे फ़ाइल का सटीक यूआरएल डाउनलोड और क्रेडेंशियल होने के लिए है। यदि आप कुकीज़ का उपयोग करना चाहते हैं तो मैं करूंगा। मुझे फ़ाइल डेटा पढ़ने और निर्दिष्ट स्थान पर इसे लिखने/सहेजने की आवश्यकता है।

मैं जिस कोड का उपयोग कर रहा हूं वह है;

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

वेब सर्वर से पहली विधि लॉगिन और सत्र 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(); 
} 

अन्य विधि सर्वर से फ़ाइल हो जाता है:

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(); 

उत्तर

20

यह कैसे मैं यह कर रहा है

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); 
} 

ध्यान दें कि मैं टी वापस करता हूं वह स्ट्रिंग के रूप में पेज। डिस्क पर सहेजने के लिए आप इसे बाइट्स [] के रूप में बेहतर रूप से वापस कर देंगे। यदि आपकी जेपीईजी फाइलें छोटी हैं (वे आमतौर पर आकार में गीगाबाइट नहीं हैं), तो आप उन्हें मेमोरी स्ट्रीम में डाल सकते हैं, और फिर डिस्क पर सहेज सकते हैं। इसमें सी # में कुछ 2 या 3 सरल रेखाएं होंगी, और ऊपर प्रदान की गई संभावित खतरनाक मेमोरी लीक के साथ कठिन कोड की 30 लाइनें नहीं होंगी।

+0

धन्यवाद एलिस, हाँ, मैंने पहली विधि की कोशिश की और कुकी को सत्र आईडी के रूप में मिला और जब मैं उस कुकी संग्रह को नई वेबरक्वेट में असाइन करता हूं और फ़ाइल यूआरएल यानी अनुरोध करने का प्रयास करता हूं यानी http://phasghfh/filename=hasfhgfhg.mro । जब मैं स्ट्रिंग फॉर्म में प्रतिक्रिया प्राप्त करने का प्रयास करता हूं। मुझे जो स्ट्रिंग मान मिलते हैं वह HTML पृष्ठ/लॉगिन पेज का व्यूसोर्स है। कृपया मुझे जवाब दें .. मैं वास्तव में आपकी मदद की सराहना करता हूं। – Vinay

+0

इसका मतलब है कि आपने वेब पेज का सफल डाउनलोड किया है, लेकिन लॉगिन और पासवर्ड सही तरीके से पास नहीं किया है। मेरा उदाहरण (string.Format कमांड के साथ लाइन देखें) POST के प्रारूप का उपयोग करता है, जिसे मैंने सर्वर पर php के साथ देखा जहां मैं अपना कोड उपयोग करना चाहता था। मैंने फ़ायरफ़ॉक्स प्लगइन के साथ शुरुआत की जो सर्वर के साथ सभी संचार दिखाता है, और फिर मेरे कोड में भी ऐसा ही करता है। और यह काम करता है। –

+0

अल केप, यू आर सही, मैं फ़ाइल के HTML को सफलतापूर्वक डाउनलोड करने में सक्षम हूं। कोई सुझाव जहां समस्या/समस्या बनी रहती है। क्या कोई अतिरिक्त देखभाल की जानी चाहिए। – Vinay

संबंधित मुद्दे

 संबंधित मुद्दे