2008-10-19 17 views
32

जावा के लिए अपाचे के कॉमन्स-httpclient का उपयोग करना, GetMethod उदाहरण में क्वेरी पैरामीटर जोड़ने का सबसे अच्छा तरीका क्या है? मैं PostMethod उपयोग कर रहा हूँ, तो यह बहुत सीधा है:मैं GetMethod (जावा कॉमन्स-httpclient का उपयोग कर) में क्वेरी पैरामीटर कैसे जोड़ूं?

PostMethod method = new PostMethod(); 
method.addParameter("key", "value"); 

GetMethod एक "addParameter" विधि नहीं है, हालांकि। मुझे पता चला कि यह काम करता है है:

GetMethod method = new GetMethod("http://www.example.com/page"); 
method.setQueryString(new NameValuePair[] { 
    new NameValuePair("key", "value") 
}); 

हालांकि, उदाहरण मैंने देखा है की सबसे अधिक या तो हार्ड कोड मापदंडों सीधे यूआरएल में, उदाहरण के लिए:

GetMethod method = new GetMethod("http://www.example.com/page?key=value"); 

या हार्ड कोड क्वेरी स्ट्रिंग, उदाहरण:

GetMethod method = new GetMethod("http://www.example.com/page"); 
method.setQueryString("?key=value"); 

क्या इन पैटर्न में से कोई एक पसंदीदा होना चाहिए? और PostMethod और GetMethod के बीच API विसंगति क्यों? और उन सभी अन्य HttpMethodParams विधियों के लिए क्या उपयोग किया जाना चाहिए?

उत्तर

22

पोस्ट विधियों में पोस्ट पैरामीटर हैं, लेकिन get methods do not

क्वेरी पैरामीटर यूआरएल में एम्बेडेड हैं। HttpClient का वर्तमान संस्करण कन्स्ट्रक्टर में एक स्ट्रिंग स्वीकार करता है। आप ऊपर कुंजी, मान युग्म जोड़ना चाहते थे, तो आप इस्तेमाल कर सकते हैं:

String url = "http://www.example.com/page?key=value"; 
GetMethod method = new GetMethod(url); 

एक अच्छा प्रारंभिक ट्यूटोरियल Apache Jakarta Commons page पर पाया जा सकता।

अद्यतन: टिप्पणी में सुझाव के अनुसार, NameValuePair काम करता है।

GetMethod method = new GetMethod("example.com/page"); 
method.setQueryString(new NameValuePair[] { 
    new NameValuePair("key", "value") 
}); 
+6

मुझे पता चला कि यह काम करता है: GetMethod विधि = नए GetMethod ("http://www.example.com/page"); method.setQueryString (नया नाम वैल्यूपेयर [] { नया नाम वैल्यूपेयर ("कुंजी", "मान") }); हालांकि, ट्यूटोरियल पेज पर इसका उल्लेख नहीं किया गया है। क्या इस पैटर्न से बचा जाना चाहिए? – Ross

+0

एचएम, स्पष्ट रूप से आप टिप्पणियों में कोड ब्लॉक नहीं डाल सकते हैं, इसलिए मैंने उस उदाहरण और अन्य को जोड़ने के लिए अपना प्रश्न संपादित कर लिया है। – Ross

17

यह व्यक्तिगत पसंद का मामला नहीं है। यहाँ प्रासंगिक मुद्दा यूआरएल-एन्कोडिंग, आपके पैरामीटर मान ताकि मूल्यों दूषित न होगा या अतिरिक्त डिलीमीटर के रूप में गलत व्याख्या की है, आदि

हमेशा की तरह, यह सबसे अच्छा है विस्तार से API दस्तावेज़ों को पढ़ने के लिए: HttpClient API Documentation

इस पढ़ना, आप देख सकते हैं कि setQueryString(String) नहीं यूआरएल एन्कोड करने या अपने मानकों & मूल्यों परिसीमित जाएगा, जबकि setQueryString(NameValuePair[]) स्वचालित रूप से URL एन्कोड करने और अपने पैरामीटर के नाम और मान परिसीमित होगा। यह सबसे अच्छा तरीका है जब भी आप गतिशील डेटा का उपयोग कर रहे है, क्योंकि यह ऐम्परसेंड, बराबर चिह्न, आदि शामिल हो सकता है

8

इसे इस तरह का प्रयास करें:

URIBuilder builder = new URIBuilder("https://graph.facebook.com/oauth/access_token") 
      .addParameter("client_id", application.getKey()) 
      .addParameter("client_secret", application.getSecret()) 
      .addParameter("redirect_uri", callbackURL) 
      .addParameter("code", code); 

    HttpPost method = new HttpPost(builder.build()); 
+6

Urlbuilder में कौन सा पैकेज है? –

+0

मुझे लगता है कि यह होना चाहिए: "GetMethod (builder.build())" –

+0

URIBuilder: org.apache.http.client.utils पर पाया जा सकता है।URIBuilder; – AtliB