অ্যাপাচি এইচটিপিপিলেট ব্যবহার করে কীভাবে জেএসনকে পোষ্ট করবেন?


91

আমার নীচের মতো কিছু রয়েছে:

final String url = "http://example.com";

final HttpClient httpClient = new HttpClient();
final PostMethod postMethod = new PostMethod(url);
postMethod.addRequestHeader("Content-Type", "application/json");
postMethod.addParameters(new NameValuePair[]{
        new NameValuePair("name", "value)
});
httpClient.executeMethod(httpMethod);
postMethod.getResponseBodyAsStream();
postMethod.releaseConnection();

এটি 500 এর সাথে ফিরে আসতে থাকে The পরিষেবা প্রদানকারী বলছে আমাকে জেএসএন পাঠাতে হবে। এটি কীভাবে অ্যাপাচি এইচটিপিপিএলেন্ট 3.1+ দিয়ে করা হয়?


4
আপনি NameValuePairকেবল একটি অনুরোধের প্যারামিটার যুক্ত করেছেন, আপনি আপনার কোডে কোনও জেএসএন পাঠাচ্ছেন না। পরিষেবাটি JSON কাঠামোটি কী প্রত্যাশা করবে, আপনার ডেটা কী প্রেরণ করবে? আপনি এমন postMethod.setRequestEntity()একটি সন্ধান করছেন StringRequestEntityযাতে আপনার জেএসওএন রয়েছে।
ফিলিপ রেচার্ট

উত্তর:


188

অ্যাপাচি এইচটিপিপ্লাইয়েন্ট JSON সম্পর্কে কিছুই জানে না, তাই আপনাকে আলাদাভাবে আপনার JSON তৈরি করতে হবে। এটি করার জন্য, আমি json.org থেকে সাধারণ জেএসএন -জাভা লাইব্রেরিটি পরীক্ষা করার পরামর্শ দিচ্ছি । (যদি "জেএসওএন-জাভা" আপনার উপযুক্ত না হয়, json.org এর বিভিন্ন ভাষায় গ্রন্থাগারগুলির একটি বৃহত তালিকা রয়েছে))

একবার আপনি আপনার JSON তৈরি করেছেন, আপনি এটি পোস্ট করার জন্য নীচের কোডের মতো কিছু ব্যবহার করতে পারেন

StringRequestEntity requestEntity = new StringRequestEntity(
    JSON_STRING,
    "application/json",
    "UTF-8");

PostMethod postMethod = new PostMethod("http://example.com/action");
postMethod.setRequestEntity(requestEntity);

int statusCode = httpClient.executeMethod(postMethod);

সম্পাদনা করুন

দ্রষ্টব্য - উপরের উত্তরটি, যেমন প্রশ্নে জিজ্ঞাসা করা হয়েছে, অ্যাপাচি এইচটিপিপিপ্লায়েন্ট ৩.১ এ প্রযোজ্য। তবে, সর্বশেষতম অ্যাপাচি ক্লায়েন্টের বিরুদ্ধে বাস্তবায়ন খুঁজছেন এমন কাউকে সহায়তা করতে:

StringEntity requestEntity = new StringEntity(
    JSON_STRING,
    ContentType.APPLICATION_JSON);

HttpPost postMethod = new HttpPost("http://example.com/action");
postMethod.setEntity(requestEntity);

HttpResponse rawResponse = httpclient.execute(postMethod);

কীভাবে জেসনকে গেটরলে যুক্ত করতে পারেন?
মিঃ লু

4
সর্বদা জানতে চেয়েছিলেন যে কোনওটিতে parameterযুক্ত করা যেতে পারে POSTMethodএবং একই RequestEntityসাথে এটিতে সেট করা যায় কিনা? আমি জানি এটি অযৌক্তিক মনে হলেও কৌতূহলী।
21-29 এ জিজ্ঞাসা করুন

33
যারা ভাবছেন তাদের StringRequestEntityদ্বারা প্রতিস্থাপন করা হয়েছে StringEntity
অ্যালেক্স

9
এইচটিটিপিপ্লিয়েন্টের পরবর্তী প্রকাশের সাথে পোস্টমথোডের পরিবর্তে এইচটিপিপিস্ট পোস্ট করা হয়েছিল।
অ্যাভিরো

4
json রেফারেন্স লিঙ্কটি নষ্ট হয়েছে
সাইমন কে।

19

জন্য অ্যাপাচি HttpClient 4.5 অথবা ঊর্ধ্বতন সংস্করণ সংস্করণ:

    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpPost httpPost = new HttpPost("http://targethost/login");
    String JSON_STRING="";
    HttpEntity stringEntity = new StringEntity(JSON_STRING,ContentType.APPLICATION_JSON);
    httpPost.setEntity(stringEntity);
    CloseableHttpResponse response2 = httpclient.execute(httpPost);

বিঃদ্রঃ:

1 কোডটি সংকলন করতে httpclientপ্যাকেজ এবং httpcoreপ্যাকেজ উভয়ই আমদানি করা উচিত।

২ টি চেষ্টা-ব্লক বাদ দেওয়া হয়েছে।

তথ্যসূত্র : অ্যাপাচি অফিসিয়াল গাইড

কমন্স এইচটিপিপ্লিয়েন্ট প্রকল্পটি এখন জীবনের শেষ, আর আর বিকাশমান নয়। এটি অ্যাচচি এইচটিপিপি কম্পোনেন্টস প্রকল্পটি এর এইচটিটিপিপ্লায়েন্ট এবং এইচটিটিপি কোর মডিউলগুলিতে প্রতিস্থাপন করেছে


3

জ্যানোসাইড দ্বারা দুর্দান্ত উত্তরে উল্লিখিত হিসাবে , আপনাকে জেএসএন স্ট্রিংটি তৈরি করতে হবে এবং এটি হিসাবে সেট করতে হবে StringEntity

JSON স্ট্রিংটি তৈরি করতে আপনি যে কোনও লাইব্রেরি বা পদ্ধতিটি স্বাচ্ছন্দ্যযুক্ত ব্যবহার করতে পারেন। জ্যাকসন লাইব্রেরি একটি সহজ উদাহরণ:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;

ObjectMapper mapper = new ObjectMapper();
ObjectNode node = mapper.createObjectNode();
node.put("name", "value"); // repeat as needed
String JSON_STRING = node.toString();
postMethod.setEntity(new StringEntity(JSON_STRING, ContentType.APPLICATION_JSON));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.