2008-12-19 11 views
17

मुझे एक स्क्रिप्ट के बीच में एक यूआरएल में POST डेटा की आवश्यकता है। क्लासिक एएसपी में रिमोट यूआरएल में डेटा कैसे पोस्ट करूं?

  • फार्म process.asp को प्रस्तुत:

    1. उपयोगकर्ता फ़ॉर्म भरता है मैं इस बिंदु पर एक 3 पार्टी एकीकरण के लिए POST डेटा की जरूरत है।
    2. process.asp उपयोगकर्ता को धन्यवाद देने के लिए उपयोगकर्ता को समाप्त और निर्देशित करता है।
  • +0

    .Net उस तरह की प्रसंस्करण को भी अनुमति देता है। बटन या हाइपरलिंक नियंत्रण के लिए क्लिक इवेंट में बस अपना प्रोसेसिंग.एपी कोड डालें, या अगर इसे पोस्ट इवेंट से कॉल करें तो IsPostBack और _all_ फॉर्म सबमिशन का कारण बनना चाहिए। –

    +0

    इसे पहले 20 मिनट के रूप में .NET के रूप में टैग किया गया था ... –

    उत्तर

    26

    मुझे यकीन है कि क्यों अन्य सभी को ASP.Net पोस्ट कर रहा है नहीं कर रहा हूँ समाधान जब आपने विशेष रूप से कहा था कि आप एएसपी "क्लासिक" का उपयोग कर रहे हैं।

    ऐसा कुछ काम करना चाहिए। मैंने कोड नहीं लिखा; मैंने इसे कहीं और पाया। लेकिन MSXML2.ServerXMLHTTP ऑब्जेक्ट वह है जिसे आप उपयोग करना चाहते हैं यदि आप कुछ वाणिज्यिक खरीदना नहीं चाहते हैं।

    function getHTML (strUrl) 
        Set xmlHttp = Server.Createobject("MSXML2.ServerXMLHTTP") 
        xmlHttp.Open "GET", strUrl, False 
        xmlHttp.setRequestHeader "User-Agent", "asp httprequest" 
        xmlHttp.setRequestHeader "content-type", "application/x-www-form-urlencoded" 
        xmlHttp.Send 
        getHTML = xmlHttp.responseText 
        xmlHttp.abort() 
        set xmlHttp = Nothing 
    end function 
    

    आप उत्पादन परिवेश में उपयोग के लिए है कि करने के लिए कुछ त्रुटि हैंडलिंग कोड जोड़ने की आवश्यकता हो सकती है। मेरा मानना ​​है कि ऑब्जेक्ट त्रुटियों को फेंकता है अगर उसे 404 या टाइमआउट त्रुटि मिलती है। आपको त्रुटि से पहले एएसपी-स्टाइल (यक) को "जाल" करने की आवश्यकता होगी। आगे बढ़ें और फिर एएसपी त्रुटि ऑब्जेक्ट की जांच करें ताकि कोई समस्या हो या नहीं।

    गुड लक!

    +0

    मूल रूप से सवाल कई नेट संदर्भ थे जिन्हें बाद में संपादित किया गया था। –

    +0

    सामग्री-प्रकार जीईटी अनुरोध के लिए अतिप्रवाह है, कोई सामग्री नहीं है। उपयोगकर्ता-एजेंट मजेदार है लेकिन अतिप्रवाह भी है। – AnthonyWJones

    +3

    उपयोगकर्ता एजेन्ट हमेशा अनिवार्य नहीं है - आप वास्तव में इसके आधार पर प्रतिक्रिया में अलग-अलग सामग्री प्राप्त कर सकते हैं। –

    2

    नेट में यह System.Net.WebClient या System.Net.HttpWebRequest है।

    क्लासिक एएसपी का एक पूरी तरह से अलग एपीआई है- मुझे यकीन नहीं है कि आप इसके बजाय क्या उपयोग करेंगे।

    [संपादित करें]
    मुझे लगता है कि अगर क्लासिक एएसपी किसी भी इस के लिए समर्थन में बनाया गया है, यह एक स्क्रिप्टिंग वस्तु में है, इसलिए जैसे: CreateObject("Scripting.????")

    0

    ASP.NET में, यह बहुत आसान है:

    यहां वाणिज्यिक ASPHTTP पुस्तकालय के साथ यह करना
    +0

    यहां तक ​​कि यह अधिक हो रहा है- system.net.webclient 99% अनुरोधों को बहुत कम कोड में संभाल देगा। –

    0

    आप इसे कई तरह से कर सकते हैं। WebClient

    WebClient Client = new WebClient(); 
    Client.DownloadFile("http://www.stackoverflow.com/myfile.html", "myfile.html"); 
    

    या के साथ आप एक धारा में डेटा डाल सकते हैं अपने कार्यक्रम में इसका उपयोग करना:

    WebClient Client = new WebClient(); 
    Stream strm = Client.OpenRead ("http://www.stackoverflow.com/myfile.htm"); 
    

    लेकिन मैं उपयोग HttpWebRequest पसंद करते हैं:

    HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create("http://www.stackoverflow.com/myfile.html"); 
    StreamWriter myWriter = new StreamWriter(objRequest.GetRequestStream()); 
    

    मैं दूसरे को पसंद करते हैं एक क्योंकि आपके पास POST/GET या कुकी के लिए अधिक विकल्प हो सकता है।

    0

    यहां वर्णित कक्षा का उपयोग करें। यह एक बहुत अच्छा तरीका है और मैं यह सब समय का उपयोग करें:

    http://www.jigar.net/articles/viewhtmlcontent78.aspx

    public class RemotePost{ 
        private System.Collections.Specialized.NameValueCollection Inputs 
        = new System.Collections.Specialized.NameValueCollection() ; 
    
        public string Url = "" ; 
        public string Method = "post" ; 
        public string FormName = "form1" ; 
    
        public void Add(string name, string value){ 
         Inputs.Add(name, value) ; 
        } 
    
        public void Post(){ 
         System.Web.HttpContext.Current.Response.Clear() ; 
    
         System.Web.HttpContext.Current.Response.Write("<html><head>") ; 
    
         System.Web.HttpContext.Current.Response.Write(string .Format("</head><body onload=\"document.{0}.submit()\">" ,FormName)) ; 
    
         System.Web.HttpContext.Current.Response.Write(string .Format("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >" , 
    
         FormName,Method,Url)) ; 
          for (int i = 0 ; i< Inputs.Keys.Count ; i++){ 
          System.Web.HttpContext.Current.Response.Write(string .Format("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">" ,Inputs.Keys[i],Inputs[Inputs.Keys[i]])) ; 
         } 
         System.Web.HttpContext.Current.Response.Write("</form>") ; 
         System.Web.HttpContext.Current.Response.Write("</body></html>") ; 
         System.Web.HttpContext.Current.Response.End() ; 
        } 
    } 
    

    इसे पसंद का प्रयोग करें:

    RemotePost myremotepost = new RemotePost() ; 
    myremotepost.Url = "http://www.jigar.net/demo/HttpRequestDemoServer.aspx" ; 
    myremotepost.Add("field1" , "Huckleberry") ; 
    myremotepost.Add("field2" , "Finn") ; 
    myremotepost.Post() ; 
    
    4

    अधिकांश फॉर्म एक्शन पेज पोस्ट के रूप में डेटा स्वीकार करते हैं।

    Function postFormData(url, data) 
        Dim xhr : Set xhr = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0") 
        xhr.open "POST", url, false 
        xhr.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
        xhr.send Data 
        If xhr.Status = 200 Then 
         postFormData = xhr.ResponseText 
        Else 
         Err.Raise 1001, "postFormData", "Post to " & url & " failed with " & xhr.Status 
        End If 
    End Function 
    

    डेटा मूल्यों पर डेटा यूआरएल एन्कोडिंग बनाने की आवश्यकता होती है। चूंकि ASP का Server.URLEncode विधि केवल पथ एन्कोडिंग और नहीं घटक एन्कोडिंग करता है आप% 2F साथ/पात्रों बाहर प्रतिस्थापित करने की आवश्यकता

    Function URLEncodeComponent(value) 
        URLEncodeComponent = Server.URLEncode(value) 
        URLEncodeComponent = Replace(URLEncodeComponent, "/", "%2F") 
    End Function 
    
    1

    ठीक सभी जवाब बहुत जटिल थे और मैं जानता हूँ कि आप पहले से ही एक समाधान का चयन किया है - लेकिन मुझे लगता है सरल सर्वर की तरह। ट्रांसफर() कमांड आपको वही कर सकता था जो आपको चाहिए।

    नए पृष्ठ पर Response.Redirect (url) की बजाय अपनी स्क्रिप्ट के अंत में - बस एक सर्वर करें। ट्रांसफर (यूआरएल) और यह आपके पूरे अनुरोध संग्रह को अगले पृष्ठ पर भेज देगा।

    इसके बारे में here (support.microsoft.com) पढ़ें।

    कुछ कैच हैं (यानी यह ब्राउज़र पर एक ही यूआरएल रखता है ताकि यह बैक बटन और इस तरह के चाल चल सके) लेकिन अन्यथा यह बहुत आसान है।

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