java Android में HTTP GET अनुरोध में पैरामीटर कैसे जोड़ें?




http-get (7)

मेरे पास एक HTTP GET अनुरोध है कि मैं भेजने का प्रयास कर रहा हूं। मैंने पहले इस अनुरोध में पैरामीटर जोड़ने का प्रयास किया था, पहले BasicHttpParams ऑब्जेक्ट बनाकर और उस ऑब्जेक्ट में पैरामीटर जोड़कर, फिर मेरे HttpGet ऑब्जेक्ट पर setParams( basicHttpParms ) को HttpGet करना। यह विधि विफल रहता है। लेकिन अगर मैं अपने यूआरएल में मैन्युअल रूप से अपने पैरामीटर जोड़ता हूं (यानी संलग्न करें ?param1=value1&param2=value2 ) यह सफल होता है।

मुझे पता है कि मैं यहाँ कुछ याद कर रहा हूं और किसी भी मदद की सराहना की जाएगी।


    HttpClient client = new DefaultHttpClient();

    Uri.Builder builder = Uri.parse(url).buildUpon();

    for (String name : params.keySet()) {
        builder.appendQueryParameter(name, params.get(name).toString());
    }

    url = builder.build().toString();
    HttpGet request = new HttpGet(url);
    HttpResponse response = client.execute(request);
    return EntityUtils.toString(response.getEntity(), "UTF-8");

पैरामीटर प्राप्त करने के साथ यूरी बनाने के लिए, उरी.बिल्डर एक अधिक प्रभावी तरीका प्रदान करता है।

Uri uri = new Uri.Builder()
    .scheme("http")
    .authority("foo.com")
    .path("someservlet")
    .appendQueryParameter("param1", foo)
    .appendQueryParameter("param2", bar)
    .build();

यदि आपके पास निरंतर URL मैं apache http पर निर्मित सरलीकृत http-request उपयोग करने की सलाह देता हूं।

आप अपने ग्राहक को निम्नलिखित के रूप में बना सकते हैं:

private filan static HttpRequest<YourResponseType> httpRequest = 
                   HttpRequestBuilder.createGet(yourUri,YourResponseType)
                   .build();

public void send(){
    ResponseHendler<YourResponseType> rh = 
         httpRequest.execute(param1, value1, param2, value2);

    handler.ifSuccess(this::whenSuccess).otherwise(this::whenNotSuccess);
}

public void whenSuccess(ResponseHendler<YourResponseType> rh){
     rh.ifHasContent(content -> // your code);
}

public void whenSuccess(ResponseHendler<YourResponseType> rh){
   LOGGER.error("Status code: " + rh.getStatusCode() + ", Error msg: " + rh.getErrorText());
}

नोट: आपकी प्रतिक्रिया में हेरफेर करने के लिए कई उपयोगी तरीके हैं।


HttpComponents 4.2+ रूप में एक नई कक्षा URIBuilder , जो यूआरआई उत्पन्न करने के लिए सुविधाजनक तरीका प्रदान करता है।

आप स्ट्रिंग यूआरएल से सीधे यूआरआई बना सकते हैं:

List<NameValuePair> listOfParameters = ...;

URI uri = new URIBuilder("http://example.com:8080/path/to/resource?mandatoryParam=someValue")
    .addParameter("firstParam", firstVal)
    .addParameter("secondParam", secondVal)
    .addParameters(listOfParameters)
    .build();

अन्यथा, आप स्पष्ट रूप से सभी मानकों को निर्दिष्ट कर सकते हैं:

URI uri = new URIBuilder()
    .setScheme("http")
    .setHost("example.com")
    .setPort(8080)
    .setPath("/path/to/resource")
    .addParameter("mandatoryParam", "someValue")
    .addParameter("firstParam", firstVal)
    .addParameter("secondParam", secondVal)
    .addParameters(listOfParameters)
    .build();

एक बार जब आपने URI ऑब्जेक्ट बनाया है, तो आपको बस HttpGet ऑब्जेक्ट बनाने और इसे करने की आवश्यकता है:

//create GET request
HttpGet httpGet = new HttpGet(uri);
//perform request
httpClient.execute(httpGet ...//additional parameters, handle response etc.

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("param1","value1");

String query = URLEncodedUtils.format(params, "utf-8");

URI url = URIUtils.createURI(scheme, userInfo, authority, port, path, query, fragment); //can be null
HttpGet httpGet = new HttpGet(url);

यूआरआई जावाडोक

नोट: url = new URI(...) छोटी है


प्रक्रिया

setParams() 

पसंद

httpget.getParams().setParameter("http.socket.timeout", new Integer(5000));

केवल HttpProtocol पैरामीटर जोड़ता है।

HttpGet निष्पादित करने के लिए आपको अपने पैरामीटर मैन्युअल रूप से यूआरएल में जोड़ना चाहिए

HttpGet myGet = new HttpGet("http://foo.com/someservlet?param1=foo&param2=bar");

या पोस्ट अनुरोध का उपयोग here यदि आप रुचि रखते हैं तो here और पोस्ट अनुरोधों के बीच अंतर समझाया गया here


मैं यूआरएल स्ट्रिंग बनाने के लिए NameValuePair और URLEncodedUtils की एक सूची का उपयोग करता हूं।

protected String addLocationToUrl(String url){
    if(!url.endsWith("?"))
        url += "?";

    List<NameValuePair> params = new LinkedList<NameValuePair>();

    if (lat != 0.0 && lon != 0.0){
        params.add(new BasicNameValuePair("lat", String.valueOf(lat)));
        params.add(new BasicNameValuePair("lon", String.valueOf(lon)));
    }

    if (address != null && address.getPostalCode() != null)
        params.add(new BasicNameValuePair("postalCode", address.getPostalCode()));
    if (address != null && address.getCountryCode() != null)
        params.add(new BasicNameValuePair("country",address.getCountryCode()));

    params.add(new BasicNameValuePair("user", agent.uniqueId));

    String paramString = URLEncodedUtils.format(params, "utf-8");

    url += paramString;
    return url;
}






http-get