ভ্যানিলা জাভাতে একটি পোষ্ট অনুরোধ পাঠানো সহজ। একটি দিয়ে শুরু করে URL
আমাদের এটি URLConnection
ব্যবহারে রূপান্তর করতে হবে url.openConnection();
। এর পরে, আমাদের এটিকে কাস্ট করা দরকার HttpURLConnection
, যাতে setRequestMethod()
আমাদের পদ্ধতিটি সেট করার জন্য আমরা এর পদ্ধতিটি অ্যাক্সেস করতে পারি । আমরা শেষ পর্যন্ত বলেছি যে আমরা সংযোগের মাধ্যমে ডেটা প্রেরণ করতে যাচ্ছি।
URL url = new URL("https://www.example.com/login");
URLConnection con = url.openConnection();
HttpURLConnection http = (HttpURLConnection)con;
http.setRequestMethod("POST"); // PUT is another valid option
http.setDoOutput(true);
তারপরে আমাদের কী প্রেরণ করতে হবে তা আমাদের জানিয়ে দেওয়া দরকার:
একটি সাধারণ ফর্ম পাঠানো
একটি HTTP ফর্ম থেকে আসা একটি সাধারণ POST একটি ভাল সংজ্ঞায়িত ফর্ম্যাট আছে। আমাদের এই ইনপুটটিকে এই ফর্ম্যাটে রূপান্তর করতে হবে:
Map<String,String> arguments = new HashMap<>();
arguments.put("username", "root");
arguments.put("password", "sjh76HSn!"); // This is a fake password obviously
StringJoiner sj = new StringJoiner("&");
for(Map.Entry<String,String> entry : arguments.entrySet())
sj.add(URLEncoder.encode(entry.getKey(), "UTF-8") + "="
+ URLEncoder.encode(entry.getValue(), "UTF-8"));
byte[] out = sj.toString().getBytes(StandardCharsets.UTF_8);
int length = out.length;
তারপরে আমরা আমাদের ফর্মের বিষয়বস্তু যথাযথ শিরোনামের সাথে http অনুরোধের সাথে সংযুক্ত করতে পারি এবং এটি প্রেরণ করতে পারি।
http.setFixedLengthStreamingMode(length);
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
http.connect();
try(OutputStream os = http.getOutputStream()) {
os.write(out);
}
// Do something with http.getInputStream()
JSON প্রেরণ করা হচ্ছে
আমরা জাভা ব্যবহার করে জসন পাঠাতে পারি, এটিও সহজ:
byte[] out = "{\"username\":\"root\",\"password\":\"password\"}" .getBytes(StandardCharsets.UTF_8);
int length = out.length;
http.setFixedLengthStreamingMode(length);
http.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
http.connect();
try(OutputStream os = http.getOutputStream()) {
os.write(out);
}
// Do something with http.getInputStream()
মনে রাখবেন যে বিভিন্ন সার্ভারগুলি জসনের জন্য বিভিন্ন সামগ্রী-প্রকার গ্রহণ করে, এই প্রশ্নটি দেখুন।
জাভা পোস্ট সহ ফাইল পাঠানো হচ্ছে
ফর্ম্যাটটি আরও জটিল হওয়ায় ফাইলগুলি প্রেরণাকে পরিচালনা করা আরও চ্যালেঞ্জ হিসাবে বিবেচিত হতে পারে। আমরা স্ট্রিং হিসাবে ফাইলগুলি প্রেরণের জন্য সমর্থন যুক্ত করতে যাচ্ছি, যেহেতু আমরা ফাইলটিকে মেমরিতে পুরোপুরি বাফার করতে চাই না।
এর জন্য, আমরা কিছু সহায়ক পদ্ধতি সংজ্ঞায়িত করি:
private void sendFile(OutputStream out, String name, InputStream in, String fileName) {
String o = "Content-Disposition: form-data; name=\"" + URLEncoder.encode(name,"UTF-8")
+ "\"; filename=\"" + URLEncoder.encode(filename,"UTF-8") + "\"\r\n\r\n";
out.write(o.getBytes(StandardCharsets.UTF_8));
byte[] buffer = new byte[2048];
for (int n = 0; n >= 0; n = in.read(buffer))
out.write(buffer, 0, n);
out.write("\r\n".getBytes(StandardCharsets.UTF_8));
}
private void sendField(OutputStream out, String name, String field) {
String o = "Content-Disposition: form-data; name=\""
+ URLEncoder.encode(name,"UTF-8") + "\"\r\n\r\n";
out.write(o.getBytes(StandardCharsets.UTF_8));
out.write(URLEncoder.encode(field,"UTF-8").getBytes(StandardCharsets.UTF_8));
out.write("\r\n".getBytes(StandardCharsets.UTF_8));
}
এরপরে আমরা নিম্নোক্তভাবে একটি বহুগর্ভ পোস্ট অনুরোধ তৈরি করতে এই পদ্ধতিগুলি ব্যবহার করতে পারি:
String boundary = UUID.randomUUID().toString();
byte[] boundaryBytes =
("--" + boundary + "\r\n").getBytes(StandardCharsets.UTF_8);
byte[] finishBoundaryBytes =
("--" + boundary + "--").getBytes(StandardCharsets.UTF_8);
http.setRequestProperty("Content-Type",
"multipart/form-data; charset=UTF-8; boundary=" + boundary);
// Enable streaming mode with default settings
http.setChunkedStreamingMode(0);
// Send our fields:
try(OutputStream out = http.getOutputStream()) {
// Send our header (thx Algoman)
out.write(boundaryBytes);
// Send our first field
sendField(out, "username", "root");
// Send a seperator
out.write(boundaryBytes);
// Send our second field
sendField(out, "password", "toor");
// Send another seperator
out.write(boundaryBytes);
// Send our file
try(InputStream file = new FileInputStream("test.txt")) {
sendFile(out, "identification", file, "text.txt");
}
// Finish the request
out.write(finishBoundaryBytes);
}
// Do something with http.getInputStream()
PostMethod
এটিতে আমার হাত পেতে স্ট্যাকওভারফ্লো.comHttpPost
/ a / 9242394 / 1338936 অনুসারে এটি আসলে বলা হয়েছে - যার যেমন এই উত্তরটি আমি পেয়েছিলাম ঠিক তার জন্যই :)