2014-09-05 6 views
31

मैंने सुना है कि ग्रोवी में एक अंतर्निहित आरईएसटी/HTTP क्लाइंट है। एकमात्र लाइब्रेरी मुझे मिल सकती है HttpBuilder, क्या यह है?ग्रोवी निर्मित आरईएसटी/HTTP क्लाइंट में निर्मित?

असल में मैं किसी भी पुस्तकालय (यदि संभव हो तो आयात किए बिना) ग्रोवी कोड से HTTP GET को करने का एक तरीका ढूंढ रहा हूं। लेकिन चूंकि यह मॉड्यूल कोर ग्रोवी का हिस्सा नहीं दिखता है, इसलिए मुझे यकीन नहीं है कि मेरे पास सही lib है या नहीं।

+0

नीचे दिए गए उत्तरों को सारांशित करने के लिए 'j = new groovy.json.JsonSlurper()। ParseText (नया यूआरएल ("https://httpbin.org/get") .getText())' फिर 'println j.headers ["उपयोगकर्ता-एजेंट"] ' – MarkHu

+0

आप HttpBuilder लाइब्रेरी का एक अद्यतन (पुनः) संस्करण भी चेकआउट कर सकते हैं - https://http-builder-ng.github.io/http-builder-ng/ – cjstehno

+0

यदि आप' @ पकड़ो 'यह http-builder का उपयोग करने के लिए काफी दर्द रहित बनाता है:' @Grab (group = 'org.codehaus.groovy.modules.http-builder', मॉड्यूल = 'http-builder', संस्करण = '0.7') ' –

उत्तर

7

HTTPBuilder यह है। उपयोग करने के लिए बहुत आसान है।

import groovyx.net.http.HTTPBuilder 

def http = new HTTPBuilder('https://google.com') 
def html = http.get(path : '/search', query : [q:'waffles']) 

यह अगर आप सिर्फ प्राप्त के साथ विषय-वस्तु आकर्षित से त्रुटि हैंडलिंग और आम तौर पर और अधिक कार्यक्षमता की जरूरत है विशेष रूप से उपयोगी है।

+0

धन्यवाद @ डकोटा ब्राउन - और क्या आप पुष्टि कर सकते हैं कि मुझे कुछ भी आयात करने की आवश्यकता नहीं है? – smeeb

+0

यह नकारात्मक है, आपको जार की आवश्यकता होगी: http://groovy.codehaus.org/modules/http-builder/download.html। इसके लिए ग्रोवी कोर में कुछ भी नहीं। –

+0

धन्यवाद @ डकोटा ब्राउन - कृपया विल पी के उत्तर के नीचे मेरी टिप्पणी देखें - मेरे पास आपके लिए एक ही सवाल है – smeeb

2

मुझे नहीं लगता कि http-builder एक ग्रोवी मॉड्यूल है, बल्कि apache http-client के शीर्ष पर एक बाहरी API है, इसलिए आपको कक्षाएं आयात करने और API का एक समूह डाउनलोड करने की आवश्यकता है।

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1') 
import groovyx.net.http.* 
import static groovyx.net.http.ContentType.* 
import static groovyx.net.http.Method.* 

नोट:: के बाद से CodeHaus साइट नीचे चला गया है, तो आप (https://mvnrepository.com/artifact/org.codehaus.groovy.modules.http-builder/http-builder)

+0

धन्यवाद @Will पी - क्या यह एक Grails जीएसपी पृष्ठ के अंदर काम करेगा? – smeeb

+0

मुझे जवाब देने के लिए पर्याप्त grails नहीं पता है और मुझे नहीं लगता कि यह दृश्य से संबंधित है, न तो। आप संभवतः निर्भरताओं को डाउनलोड करना चाहते हैं या @ यूआरएल का उपयोग @ जॉन के उत्तर – Will

+1

@ एसमेब '@ ग्रैब' के अनुसार 'grails-app/conf/BuildConfig.groovy' में जोड़े जाएंगे। फिर यह नियंत्रकों, सेवाओं, ... के भीतर काम करेगा - लेकिन कृपया इस तरह के कोड को देखने के लिए जोड़ें। – cfrick

38

पर जार पा सकते हैं अपनी आवश्यकताओं सरल कर रहे हैं और आप बेहतर होगा कि तुम जार और निर्भरता डाउनलोड करने के लिए Gradle या @Grab उपयोग कर रहे हैं अतिरिक्त निर्भरता को जोड़ने से बचना चाहते हैं आप getText() तरीकों कि ग्रूवी java.net.URL वर्ग के लिए कहते हैं का उपयोग करने में सक्षम हो सकता है:

new URL("http://stackoverflow.com").getText() 

// or 

new URL("http://stackoverflow.com") 
     .getText(connectTimeout: 5000, 
       readTimeout: 10000, 
       useCaches: true, 
       allowUserInteraction: false, 
       requestProperties: ['Connection': 'close']) 

तुम वहाँ वापस बाइनरी डेटा की उम्मीद कर रहे हैं, तो मैं newInputStream() विधियों द्वारा प्रदान की गई समान कार्यक्षमता भी है।

18

सरलतम एक हो गया:

def html = "http://google.com".toURL().text 
+0

शानदार विचार। यदि हमें प्रॉक्सी सर्वर नाम और पोर्ट जोड़ने की आवश्यकता है तो मैं क्या कर सकता हूं? – Heinz

21

मूल निवासी ग्रूवी प्राप्त और पोस्ट

// GET 
def get = new URL("https://httpbin.org/get").openConnection(); 
def getRC = get.getResponseCode(); 
println(getRC); 
if(getRC.equals(200)) { 
    println(get.getInputStream().getText()); 
} 

// POST 
def post = new URL("https://httpbin.org/post").openConnection(); 
def message = '{"message":"this is a message"}' 
post.setRequestMethod("POST") 
post.setDoOutput(true) 
post.setRequestProperty("Content-Type", "application/json") 
post.getOutputStream().write(message.getBytes("UTF-8")); 
def postRC = post.getResponseCode(); 
println(postRC); 
if(postRC.equals(200)) { 
    println(post.getInputStream().getText()); 
} 
1
import groovyx.net.http.HTTPBuilder; 

public class HttpclassgetrRoles { 
    static void main(String[] args){ 
     def baseUrl = new URL('http://test.city.com/api/Cirtxyz/GetUser') 

     HttpURLConnection connection = (HttpURLConnection) baseUrl.openConnection(); 
     connection.addRequestProperty("Accept", "application/json") 
     connection.with { 
      doOutput = true 
      requestMethod = 'GET' 
      println content.text 
     } 

    } 
} 
+0

यह कोड मेरे लिए काम किया है – SQA

1

आप ग्रूवी का लाभ ले सकते साथ (जैसे शामिल हैं), सुधार URLConnection के लिए, और सरलीकृत गेटर्स/सेटर्स:

प्राप्त करें:

String getResult = new URL('http://mytestsite/bloop').text 

पोस्ट:

String postResult 
((HttpURLConnection)new URL('http://mytestsite/bloop').openConnection()).with({ 
    requestMethod = 'POST' 
    doOutput = true 
    setRequestProperty('Content-Type', '...') // Set your content type. 
    outputStream.withPrintWriter({printWriter -> 
     printWriter.write('...') // Your post data. Could also use withWriter() if you don't want to write a String. 
    }) 
    // Can check 'responseCode' here if you like. 
    postResult = inputStream.text // Using 'inputStream.text' because 'content' will throw an exception when empty. 
}) 

ध्यान दें, पोस्ट शुरू जब आप, इस तरह के रूप responseCode, inputStream.text, या getHeaderField('...') HttpURLConnection से एक मूल्य को पढ़ने के लिए कोशिश करेंगे।

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