জাভা - সহজেই পোস্টের মাধ্যমে HTTP পরামিতি প্রেরণ করা হচ্ছে


319

পদ্ধতির HTTPমাধ্যমে কিছু পরামিতিগুলির সাথে অনুরোধগুলি প্রেরণের জন্য আমি এই কোডটি সফলভাবে ব্যবহার করছি GET

void sendRequest(String request)
{
    // i.e.: request = "http://example.com/index.php?param1=a&param2=b&param3=c";
    URL url = new URL(request); 
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();           
    connection.setDoOutput(true); 
    connection.setInstanceFollowRedirects(false); 
    connection.setRequestMethod("GET"); 
    connection.setRequestProperty("Content-Type", "text/plain"); 
    connection.setRequestProperty("charset", "utf-8");
    connection.connect();
}

এখন প্যারামিটারগুলি (যেমন প্যারাম 1, প্যারাম 2, প্যারাম 3) POSTপদ্ধতির মাধ্যমে প্রেরণের দরকার হতে পারে কারণ সেগুলি খুব দীর্ঘ। আমি সেই পদ্ধতিতে অতিরিক্ত প্যারামিটার যুক্ত করার চিন্তা করছিলাম (অর্থাত্ স্ট্রিং httpMethod)।

আমি কীভাবে উপরের কোডটিকে সামান্যতম পরিবর্তন করতে পারি যাতে হয় GETবা এর মাধ্যমে পরামিতি প্রেরণ করতে সক্ষম হয় POST?

আমি যে পরিবর্তিত আশা ছিল

connection.setRequestMethod("GET");

প্রতি

connection.setRequestMethod("POST");

কৌতুকটি করত তবে প্যারামিটারগুলি এখনও জিইটি পদ্ধতির মাধ্যমে প্রেরণ করা হয়।

হয়েছে HttpURLConnectionকোনো পদ্ধতি যা সাহায্য করবে পেয়েছেন? জাভা নির্মাণের কোন সহায়ক আছে কি?

যে কোন সাহায্য অনেক বেশি প্রশংসিত হবে।


পোস্ট প্যারামিটারগুলি URL- এ নয়, HTTP শিরোনাম বিভাগে প্রেরণ করা হয়। (আপনার পোস্ট URL হবে http://example.com/index.php)
dacwe

2
জাভা ১. defined সংজ্ঞায়িত কোনও পদ্ধতি সেট-রিক্যুয়েস্টমেথড নেই: ডকস.ওরাকল.com
javase/

2
এটি HTTP (গুলি) এর ইউরাল সংযোগে কাস্ট করুন ....
পিটার ক্রিয়েন্স

প্রশ্ন বাড়িয়ে দিচ্ছেন! পোস্ট প্যারামিটার হিসাবে কোনও সংযুক্তি কীভাবে প্রেরণ করা যায় সে সম্পর্কে কি কারও কোনও ক্লু রয়েছে ...
তত্পরবশান্ত

1
প্রথম কোড স্নিপেট কেন মূল শব্দ "ফাংশন" দিয়ে শুরু হয়?
লু ভ্যালিস

উত্তর:


470

একটি জিইটি অনুরোধে, প্যারামিটারগুলি URL এর অংশ হিসাবে প্রেরণ করা হয়।

একটি পোস্ট অনুরোধে, পরামিতিগুলি শিরোনামগুলির পরে অনুরোধের মূল হিসাবে প্রেরণ করা হয়।

এইচটিপিআরএল সংযোগের সাথে একটি পোস্ট করার জন্য, সংযোগটি খোলার পরে আপনাকে সংযোগটিতে পরামিতিগুলি লিখতে হবে।

এই কোডটি আপনার শুরু করা উচিত:

String urlParameters  = "param1=a&param2=b&param3=c";
byte[] postData       = urlParameters.getBytes( StandardCharsets.UTF_8 );
int    postDataLength = postData.length;
String request        = "http://example.com/index.php";
URL    url            = new URL( request );
HttpURLConnection conn= (HttpURLConnection) url.openConnection();           
conn.setDoOutput( true );
conn.setInstanceFollowRedirects( false );
conn.setRequestMethod( "POST" );
conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded"); 
conn.setRequestProperty( "charset", "utf-8");
conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
conn.setUseCaches( false );
try( DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {
   wr.write( postData );
}

40
@ অ্যালান জেলেন্স: 'url.openconnection ()' সংযোগ খুলবে না। যদি আপনি কোনও সংযোগ () বিবৃতি নির্দিষ্ট না করেন তবে আপনি HTTP অনুরোধের বর্ধিত / শ্রবণ করে প্রেরণ করার সময় সংযোগটি খোলা হবে। আমি শংসাপত্র দিয়ে এটি চেষ্টা করেছি। এসএসএল হ্যান্ডশেকটি কেবল আপনি সংযুক্তিকে কল করার পরে বা আপনি যখন সার্ভারে কোনও ডেটা প্রেরণ করেন তখনই ঘটে।
আশ্বিন

14
getBytes () পরিবেশের ডিফল্ট charaset ব্যবহার করে, UTF-8 চরসেট নয় = utf-8 অবশ্যই বিষয়বস্তুর ধরণটি করতে হবে: অ্যাপ্লিকেশন / x-www-form-urlencoded; চরসেট = utf-8 আপনি উদাহরণে দুবার বাইট রূপান্তর করেন। করা উচিত: বাইট [] ডেটা = urlParaters.getData ("ইউটিএফ -8"); connection.getOutputStream () লিখন (তথ্য)। বন্ধ এবং ফ্লাশ এবং সংযোগ বিচ্ছিন্ন করার কোনও ব্যবহার নেই
পিটার ক্রিয়েন্স

8
@ পিটারক্রেইনস আপনার যোগ করার জন্য ধন্যবাদ - আমি বিশ্বাস করি আপনি বোঝাতে চেয়েছিলেন byte[] data = urlParameters.getBytes(Charset.forName("UTF-8")):)।
জেরিটান

7
@AlanGeleynse আপনি মিস্ করবেন না এবং wr.close (); শেষে?
বিভ্রান্ত

9
এটি কীভাবে কাজ করছে না, যদি এতগুলি উপভোগ হয়? আপনাকে কল করার পারেন প্রয়োজন conn.getResponseCode()বা conn.getInputStream()অন্যথায় এটি কোনো ডেটা পাঠায় করা হবে না।
ইমাস্কার

229

এখানে একটি সহজ উদাহরণ যা ফর্ম জমা দেয় তারপরে ফলাফল পৃষ্ঠাটি ডাম্প করে System.out। যথাযথ হিসাবে ইউআরএল এবং পোস্ট পোস্টগুলি পরিবর্তন করুন:

import java.io.*;
import java.net.*;
import java.util.*;

class Test {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://example.net/new-message.php");
        Map<String,Object> params = new LinkedHashMap<>();
        params.put("name", "Freddie the Fish");
        params.put("email", "fishie@seamail.example.com");
        params.put("reply_to_thread", 10394);
        params.put("message", "Shark attacks in Botany Bay have gotten out of control. We need more defensive dolphins to protect the schools here, but Mayor Porpoise is too busy stuffing his snout with lobsters. He's so shellfish.");

        StringBuilder postData = new StringBuilder();
        for (Map.Entry<String,Object> param : params.entrySet()) {
            if (postData.length() != 0) postData.append('&');
            postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            postData.append('=');
            postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        byte[] postDataBytes = postData.toString().getBytes("UTF-8");

        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
        conn.setDoOutput(true);
        conn.getOutputStream().write(postDataBytes);

        Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

        for (int c; (c = in.read()) >= 0;)
            System.out.print((char)c);
    }
}

আপনি যদি ফলাফলটি Stringসরাসরি মুদ্রিত না হয়ে বদলাতে চান তবে করুন:

        StringBuilder sb = new StringBuilder();
        for (int c; (c = in.read()) >= 0;)
            sb.append((char)c);
        String response = sb.toString();

এটি প্যারামিটার এনকোডিং এবং মানচিত্রের ব্যবহার অন্তর্ভুক্ত করার কারণে এটি সেরা উত্তর।
এয়ারি

4
দুর্ভাগ্যক্রমে এই কোডটি ধরে নিয়েছে যে সামগ্রীর এনকোডিংটি UTF-8সবসময় হয় না। চরসেটটি পুনরুদ্ধার করার জন্য, একটিকে শিরোনাম পাওয়া উচিত Content-Typeএবং এর চরসেটটি পার্স করা উচিত । যখন যে হেডার পাওয়া যায় না, মানক HTTP একটি ব্যবহার করুন: ISO-8859-1
ইঞ্জিনিয়ারকোডিং

@ অ্যাফেল আইএফটিএফই ... মূল্যায়নে পার্শ্ব প্রতিক্রিয়া সহ অভিব্যক্তি ব্যবহার করা সত্যই কুৎসিত।

1
@ এনজিনিয়ারকোডিং দুর্ভাগ্যক্রমে এইচটিএমএল এর জন্য এটি পুরোপুরি সঠিকভাবে করা তার থেকে আরও শক্ত, কারণ এখানে ইউনিকোড বিওএম, বা নথির ভিতরে একটি <meta charset="...">বা <meta http-equiv="Content-Type" content="...">শিরোনাম থাকতে পারে যা পার্স করা উচিত।
বোয়ান

1
@ নেপস্টার এটি করবেন না response += line;অসাধারণভাবে ধীর এবং এটি লাইন ব্রেকগুলি খায়। আমি উত্তরে স্ট্রিং প্রতিক্রিয়া পাওয়ার একটি উদাহরণ যুক্ত করেছি।
বোয়ান

63

আমি আসলে অ্যালানের উদাহরণটি পোস্টটি করতে পারি না, তাই আমি এখানেই শেষ করেছিলাম:

String urlParameters = "param1=a&param2=b&param3=c";
URL url = new URL("http://example.com/index.php");
URLConnection conn = url.openConnection();

conn.setDoOutput(true);

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

writer.write(urlParameters);
writer.flush();

String line;
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
writer.close();
reader.close();         

1
দুর্ভাগ্যক্রমে, এই কোডটি প্রতিক্রিয়াটি পড়ে না। এটি খালি ফর্মটি এইচটিএমএল পড়বে।
কোভাকস ইম্রে

অ্যালানের উদাহরণে আমাকে যা যুক্ত করতে হয়েছিল তা ছিল সাড়া খোলার প্রতিক্রিয়া। আমি এটি করার আগে, কোনও বাইট আসলে প্রেরণ করা হয়নি।
beefeather

1
Writer.close () কলটি সরিয়ে ফেলা আমার জন্য তা করেছে।
ম্যাক্সিমাম টি

23

আমি HttpURLConnectionব্যবহার করতে সত্যিই জটিল মনে। এবং আপনাকে অনেকগুলি বয়লারপ্লেট, ত্রুটিযুক্ত প্রোন কোড লিখতে হবে। আমার অ্যান্ড্রয়েড প্রকল্পগুলির জন্য আমার একটি লাইটওয়েট র‍্যাপারের প্রয়োজন হয়েছিল এবং আপনি একটি লাইব্রেরি নিয়ে এসেছিলেন যা আপনিও ব্যবহার করতে পারেন: ডেভিডওয়েব

উপরের উদাহরণটি এভাবে লেখা যেতে পারে:

Webb webb = Webb.create();
webb.post("http://example.com/index.php")
        .param("param1", "a")
        .param("param2", "b")
        .param("param3", "c")
        .ensureSuccess()
        .asVoid();

প্রদত্ত লিঙ্কটিতে আপনি বিকল্প লাইব্রেরির একটি তালিকা পেতে পারেন।


1
আমি উঁচুতে যাচ্ছি না কারণ আপনার পোস্টটির কোনও উত্তর কম ছিল এবং বিজ্ঞাপনের পরিমাণ বেশি ছিল ... তবে, আমি আপনার লাইব্রেরির সাথে খেলেছি এবং আমি এটি পছন্দ করি। খুব সংক্ষিপ্ত; সিনট্যাকটিকাল চিনি প্রচুর; আপনি যদি জাভাটিকে আমার মতো স্ক্রিপ্টিং ভাষার হিসাবে ব্যবহার করেন তবে খুব তাড়াতাড়ি এবং দক্ষতার সাথে কিছু HTTP ইন্টারঅ্যাকশন যুক্ত করার জন্য এটি দুর্দান্ত একটি গ্রন্থাগার। জিরো বয়লারপ্লেট সময়ে মূল্যবান এবং এটি ওপিতে কার্যকর হতে পারে।
ডিন

3
আমি upvote করব। আমি আমার অ্যাপ্লিকেশনগুলির একটিতে ডেভিডওয়েবকে সফলভাবে ব্যবহার করেছি এবং আরও দু'জনের জন্য এটি করব আমি শীঘ্রই বিকাশ করব। ব্যবহার করা খুব সহজ।
উইলিয়াম টি। ম্যালার্ড

আপনাকে ধন্যবাদ, অ্যান্ড্রয়েডে https সহ ডিফল্ট এইচটিপিপিলেট ব্যবহার করে SSLPeerUnverifiedException ব্যর্থ হয়: কোনও পিয়ার শংসাপত্র (এমনকি সঠিকভাবে স্বাক্ষরিত https শংসাপত্রগুলিতেও), ইউআরএল ব্যবহার করা জটিল (এনকোডিং প্যারামিটার, ফলাফলের জন্য পরীক্ষা করা) নয়। ডেভিড ওয়েব ব্যবহার করে আমার পক্ষে কাজ করেছেন, ধন্যবাদ।
মার্টিন ভিসনি

কোনও অ্যাসিঙ্কটাস্ক সমর্থন নেই? সুতরাং ডিফল্টরূপে ইউআই থ্রেড লক করা ... এটি খারাপ
slinden77

এটি একটি খুব প্রাথমিক গ্রন্থাগার। প্রোগ্রামারকে এটিকে ব্যাকগ্রাউন্ড-থ্রেড থেকে, অ্যাসিঙ্কটাস্কে, ইনটেন্স সার্ভিসে, সিঙ্ক্রোনাইজেশন হ্যান্ডলারে এবং এর মতো থেকে কল করতে হবে। এবং এটি অ্যান্ড্রয়েডের উপর নির্ভর করে না -> জাভা এসই এবং ইইতেও ব্যবহার করা যেতে পারে।
hgoebl

12

আমি উপরের উত্তরগুলি পড়েছি এবং এইচটিটিপি অনুরোধকে সহজ করার জন্য একটি ইউটিলিটি ক্লাস তৈরি করেছি। আমি আশা করি এটা তোমাকে সাহায্য করবে.

পদ্ধতি কল

  // send params with Hash Map
    HashMap<String, String> params = new HashMap<String, String>();
    params.put("email","me@example.com");
    params.put("password","12345");

    //server url
    String url = "http://www.example.com";

    // static class "HttpUtility" with static method "newRequest(url,method,callback)"
    HttpUtility.newRequest(url,HttpUtility.METHOD_POST,params, new HttpUtility.Callback() {
        @Override
        public void OnSuccess(String response) {
        // on success
           System.out.println("Server OnSuccess response="+response);
        }
        @Override
        public void OnError(int status_code, String message) {
        // on error
              System.out.println("Server OnError status_code="+status_code+" message="+message);
        }
    });

ইউটিলিটি ক্লাস

import java.io.*;
import java.net.*;
import java.util.HashMap;
import java.util.Map;
import static java.net.HttpURLConnection.HTTP_OK;

public class HttpUtility {

 public static final int METHOD_GET = 0; // METHOD GET
 public static final int METHOD_POST = 1; // METHOD POST

 // Callback interface
 public interface Callback {
  // abstract methods
  public void OnSuccess(String response);
  public void OnError(int status_code, String message);
 }
 // static method
 public static void newRequest(String web_url, int method, HashMap < String, String > params, Callback callback) {

  // thread for handling async task
  new Thread(new Runnable() {
   @Override
   public void run() {
    try {
     String url = web_url;
     // write GET params,append with url
     if (method == METHOD_GET && params != null) {
      for (Map.Entry < String, String > item: params.entrySet()) {
       String key = URLEncoder.encode(item.getKey(), "UTF-8");
       String value = URLEncoder.encode(item.getValue(), "UTF-8");
       if (!url.contains("?")) {
        url += "?" + key + "=" + value;
       } else {
        url += "&" + key + "=" + value;
       }
      }
     }

     HttpURLConnection urlConnection = (HttpURLConnection) new URL(url).openConnection();
     urlConnection.setUseCaches(false);
     urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // handle url encoded form data
     urlConnection.setRequestProperty("charset", "utf-8");
     if (method == METHOD_GET) {
      urlConnection.setRequestMethod("GET");
     } else if (method == METHOD_POST) {
      urlConnection.setDoOutput(true); // write POST params
      urlConnection.setRequestMethod("POST");
     }

     //write POST data 
     if (method == METHOD_POST && params != null) {
      StringBuilder postData = new StringBuilder();
      for (Map.Entry < String, String > item: params.entrySet()) {
       if (postData.length() != 0) postData.append('&');
       postData.append(URLEncoder.encode(item.getKey(), "UTF-8"));
       postData.append('=');
       postData.append(URLEncoder.encode(String.valueOf(item.getValue()), "UTF-8"));
      }
      byte[] postDataBytes = postData.toString().getBytes("UTF-8");
      urlConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
      urlConnection.getOutputStream().write(postDataBytes);

     }
     // server response code
     int responseCode = urlConnection.getResponseCode();
     if (responseCode == HTTP_OK && callback != null) {
      BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
      StringBuilder response = new StringBuilder();
      String line;
      while ((line = reader.readLine()) != null) {
       response.append(line);
      }
      // callback success
      callback.OnSuccess(response.toString());
      reader.close(); // close BufferReader
     } else if (callback != null) {
      // callback error
      callback.OnError(responseCode, urlConnection.getResponseMessage());
     }

     urlConnection.disconnect(); // disconnect connection
    } catch (IOException e) {
     e.printStackTrace();
     if (callback != null) {
      // callback error
      callback.OnError(500, e.getLocalizedMessage());
     }
    }
   }
  }).start(); // start thread
 }
}

10

আমি দেখতে পাচ্ছি যে আরও কিছু উত্তর বিকল্প দিয়েছে, আমি ব্যক্তিগতভাবে মনে করি যে স্বজ্ঞাত আপনি সঠিক কাজটি করছেন;)। দুঃখিত, ডিভক্সএক্সে যেখানে বেশ কয়েকটি স্পিকার এই ধরণের জিনিসটি নিয়ে বৃষ্টি করছে।

এই কারণেই আমি এই ধরণের কাজ করতে ব্যক্তিগতভাবে অ্যাপাচি-র এইচটিটিপি ক্লায়েন্ট / এইচটিপিপিওর লাইব্রেরি ব্যবহার করি, আমি জাভা এর নেটিভ এইচটিটিপি সমর্থনের চেয়ে তাদের এপিআই ব্যবহার করা সহজ বলে মনে করি। অবশ্যই ওয়াইএমএমভি!


10
import java.net.*;

public class Demo{

  public static void main(){

       String data = "data=Hello+World!";
       URL url = new URL("http://localhost:8084/WebListenerServer/webListener");
       HttpURLConnection con = (HttpURLConnection) url.openConnection();
       con.setRequestMethod("POST");
       con.setDoOutput(true);
       con.getOutputStream().write(data.getBytes("UTF-8"));
       con.getInputStream();

    }

}

5
WTH import java.net.*; !
ইউশা আলেয়ুব

4

আমারও একই প্রশ্ন ছিল. আমি পোস্টের মাধ্যমে ডেটা প্রেরণ করতে চেয়েছিলাম। আমি নিম্নলিখিত কোড ব্যবহার করেছি:

    URL url = new URL("http://example.com/getval.php");
    Map<String,Object> params = new LinkedHashMap<>();
    params.put("param1", param1);
    params.put("param2", param2);

    StringBuilder postData = new StringBuilder();
    for (Map.Entry<String,Object> param : params.entrySet()) {
        if (postData.length() != 0) postData.append('&');
        postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
        postData.append('=');
        postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
    }
    String urlParameters = postData.toString();
    URLConnection conn = url.openConnection();

    conn.setDoOutput(true);

    OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

    writer.write(urlParameters);
    writer.flush();

    String result = "";
    String line;
    BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

    while ((line = reader.readLine()) != null) {
        result += line;
    }
    writer.close();
    reader.close()
    System.out.println(result);

আমি পার্স করার জন্য জসুপ ব্যবহার করেছি:

    Document doc = Jsoup.parseBodyFragment(value);
    Iterator<Element> opts = doc.select("option").iterator();
    for (;opts.hasNext();) {
        Element item = opts.next();
        if (item.hasAttr("value")) {
            System.out.println(item.attr("value"));
        }
    }

4

GET এবং POST পদ্ধতিটি এর মতো সেট করুন ... এপিআই কলিংয়ের জন্য দুটি প্রকার 1) () এবং 2) পোস্ট () পান। url এ আমাদের ডেটা পোস্টে মান এবং পোস্ট () পদ্ধতি ব্যবহারের জন্য এপিআই জসন অ্যারে থেকে মান পেতে পদ্ধতিটি পান এবং প্রতিক্রিয়া পান।

 public class HttpClientForExample {

    private final String USER_AGENT = "Mozilla/5.0";

    public static void main(String[] args) throws Exception {

        HttpClientExample http = new HttpClientExample();

        System.out.println("Testing 1 - Send Http GET request");
        http.sendGet();

        System.out.println("\nTesting 2 - Send Http POST request");
        http.sendPost();

    }

    // HTTP GET request
    private void sendGet() throws Exception {

        String url = "http://www.google.com/search?q=developer";

        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(url);

        // add request header
        request.addHeader("User-Agent", USER_AGENT);

        HttpResponse response = client.execute(request);

        System.out.println("\nSending 'GET' request to URL : " + url);
        System.out.println("Response Code : " + 
                       response.getStatusLine().getStatusCode());

        BufferedReader rd = new BufferedReader(
                       new InputStreamReader(response.getEntity().getContent()));

        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line);
        }

        System.out.println(result.toString());

    }

    // HTTP POST request
    private void sendPost() throws Exception {

        String url = "https://selfsolve.apple.com/wcResults.do";

        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(url);

        // add header
        post.setHeader("User-Agent", USER_AGENT);

        List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
        urlParameters.add(new BasicNameValuePair("sn", "C02G8416DRJM"));
        urlParameters.add(new BasicNameValuePair("cn", ""));
        urlParameters.add(new BasicNameValuePair("locale", ""));
        urlParameters.add(new BasicNameValuePair("caller", ""));
        urlParameters.add(new BasicNameValuePair("num", "12345"));

        post.setEntity(new UrlEncodedFormEntity(urlParameters));

        HttpResponse response = client.execute(post);
        System.out.println("\nSending 'POST' request to URL : " + url);
        System.out.println("Post parameters : " + post.getEntity());
        System.out.println("Response Code : " + 
                                    response.getStatusLine().getStatusCode());

        BufferedReader rd = new BufferedReader(
                        new InputStreamReader(response.getEntity().getContent()));

        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line);
        }

        System.out.println(result.toString());

    }

}

3

এই প্যাটার্নটি ব্যবহার করে দেখুন:

public static PricesResponse getResponse(EventRequestRaw request) {

    // String urlParameters  = "param1=a&param2=b&param3=c";
    String urlParameters = Piping.serialize(request);

    HttpURLConnection conn = RestClient.getPOSTConnection(endPoint, urlParameters);

    PricesResponse response = null;

    try {
        // POST
        OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
        writer.write(urlParameters);
        writer.flush();

        // RESPONSE
        BufferedReader reader = new BufferedReader(new InputStreamReader((conn.getInputStream()), StandardCharsets.UTF_8));
        String json = Buffering.getString(reader);
        response = (PricesResponse) Piping.deserialize(json, PricesResponse.class);

        writer.close();
        reader.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

    conn.disconnect();

    System.out.println("PricesClient: " + response.toString());

    return response;
}

public static HttpURLConnection getPOSTConnection(String endPoint, String urlParameters) {

    return RestClient.getConnection(endPoint, "POST", urlParameters);

}


public static HttpURLConnection getConnection(String endPoint, String method, String urlParameters) {

    System.out.println("ENDPOINT " + endPoint + " METHOD " + method);
    HttpURLConnection conn = null;

    try {
        URL url = new URL(endPoint);
        conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod(method);
        conn.setDoOutput(true);
        conn.setRequestProperty("Content-Type", "text/plain");

    } catch (IOException e) {
        e.printStackTrace();
    }

    return conn;
}

3

এই উত্তরটিতে একটি কাস্টম জাভা POJO ব্যবহার করে পোস্ট কলের নির্দিষ্ট কেসটি অন্তর্ভুক্ত।

জেএসএন- তে আমাদের জাভা অবজেক্টটি সিরিয়াল করতে গসনের জন্য মাভেন নির্ভরতা ব্যবহার করে ।

নীচে নির্ভরতা ব্যবহার করে গসন ইনস্টল করুন।

<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.8.5</version>
  <scope>compile</scope>
</dependency>

যারা গ্রেড ব্যবহার করছেন তাদের জন্য নীচেরটি ব্যবহার করতে পারেন

dependencies {
implementation 'com.google.code.gson:gson:2.8.5'
}

অন্যান্য আমদানি ব্যবহৃত:

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.*;
import org.apache.http.impl.client.CloseableHttpClient;
import com.google.gson.Gson;

এখন, আমরা এগিয়ে যেতে এবং অ্যাপাচি দ্বারা সরবরাহিত এইচটিপিপোস্ট ব্যবহার করতে পারি

private CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httppost = new HttpPost("https://example.com");

Product product = new Product(); //custom java object to be posted as Request Body
    Gson gson = new Gson();
    String client = gson.toJson(product);

    httppost.setEntity(new StringEntity(client, ContentType.APPLICATION_JSON));
    httppost.setHeader("RANDOM-HEADER", "headervalue");
    //Execute and get the response.
    HttpResponse response = null;
    try {
        response = httpclient.execute(httppost);
    } catch (IOException e) {
        throw new InternalServerErrorException("Post fails");
    }
    Response.Status responseStatus = Response.Status.fromStatusCode(response.getStatusLine().getStatusCode());
    return Response.status(responseStatus).build();

উপরের কোডটি পোষ্ট কল থেকে প্রাপ্ত প্রতিক্রিয়া কোডের সাথে ফিরে আসবে


2

এখানে আমি jsonobject কে প্যারামিটার হিসাবে পাঠিয়েছি // jsonobject = name "নাম": "লুসিফার", "পাস": "abc"} // সার্ভারআরল = " http://192.168.100.12 / পরীক্ষার " //host=192.168.100.12

  public static String getJson(String serverUrl,String host,String jsonobject){

    StringBuilder sb = new StringBuilder();

    String http = serverUrl;

    HttpURLConnection urlConnection = null;
    try {
        URL url = new URL(http);
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setDoOutput(true);
        urlConnection.setRequestMethod("POST");
        urlConnection.setUseCaches(false);
        urlConnection.setConnectTimeout(50000);
        urlConnection.setReadTimeout(50000);
        urlConnection.setRequestProperty("Content-Type", "application/json");
        urlConnection.setRequestProperty("Host", host);
        urlConnection.connect();
        //You Can also Create JSONObject here 
        OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream());
        out.write(jsonobject);// here i sent the parameter
        out.close();
        int HttpResult = urlConnection.getResponseCode();
        if (HttpResult == HttpURLConnection.HTTP_OK) {
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    urlConnection.getInputStream(), "utf-8"));
            String line = null;
            while ((line = br.readLine()) != null) {
                sb.append(line + "\n");
            }
            br.close();
            Log.e("new Test", "" + sb.toString());
            return sb.toString();
        } else {
            Log.e(" ", "" + urlConnection.getResponseMessage());
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    } finally {
        if (urlConnection != null)
            urlConnection.disconnect();
    }
    return null;
}

2

আমি হাইপালি অ্যাপাচি HT এপিআই - তে নির্মিত এইচটিসি -রিকোয়েস্টটি পুনরুদ্ধার করি।

আপনার ক্ষেত্রে আপনি উদাহরণ দেখতে পারেন:

private static final HttpRequest<String.class> HTTP_REQUEST = 
      HttpRequestBuilder.createPost("http://example.com/index.php", String.class)
           .responseDeserializer(ResponseDeserializer.ignorableDeserializer())
           .build();

public void sendRequest(String request){
     String parameters = request.split("\\?")[1];
     ResponseHandler<String> responseHandler = 
            HTTP_REQUEST.executeWithQuery(parameters);

   System.out.println(responseHandler.getStatusCode());
   System.out.println(responseHandler.get()); //prints response body
}

আপনি যদি প্রতিক্রিয়া বডি আগ্রহী না হন

private static final HttpRequest<?> HTTP_REQUEST = 
     HttpRequestBuilder.createPost("http://example.com/index.php").build();

public void sendRequest(String request){
     ResponseHandler<String> responseHandler = 
           HTTP_REQUEST.executeWithQuery(parameters);
}

সঙ্গে সাধারণ পাঠানোর পোস্ট অনুরোধের জন্য HTTP-অনুরোধ : পড়ুন ডকুমেন্টেশন এবং আমার উত্তরগুলি দেখতে HTTP- র জাভা JSON স্ট্রিংকে সহ একটি পোস্ট অনুরোধ , পাঠানো হচ্ছে জাভা ইন HTTP POST অনুরোধ , জাভা JSON ব্যবহার করে HTTP- র পোস্ট


1

হ্যালো pls আপনার পোস্ট পদ্ধতি উন্নত করতে এই বর্গ ব্যবহার করুন

public static JSONObject doPostRequest(HashMap<String, String> data, String url) {

    try {
        RequestBody requestBody;
        MultipartBuilder mBuilder = new MultipartBuilder().type(MultipartBuilder.FORM);

        if (data != null) {


            for (String key : data.keySet()) {
                String value = data.get(key);
                Utility.printLog("Key Values", key + "-----------------" + value);

                mBuilder.addFormDataPart(key, value);

            }
        } else {
            mBuilder.addFormDataPart("temp", "temp");
        }
        requestBody = mBuilder.build();


        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();

        OkHttpClient client = new OkHttpClient();
        Response response = client.newCall(request).execute();
        String responseBody = response.body().string();
        Utility.printLog("URL", url);
        Utility.printLog("Response", responseBody);
        return new JSONObject(responseBody);

    } catch (UnknownHostException | UnsupportedEncodingException e) {

        JSONObject jsonObject=new JSONObject();

        try {
            jsonObject.put("status","false");
            jsonObject.put("message",e.getLocalizedMessage());
        } catch (JSONException e1) {
            e1.printStackTrace();
        }
        Log.e(TAG, "Error: " + e.getLocalizedMessage());
    } catch (Exception e) {
        e.printStackTrace();
        JSONObject jsonObject=new JSONObject();

        try {
            jsonObject.put("status","false");
            jsonObject.put("message",e.getLocalizedMessage());
        } catch (JSONException e1) {
            e1.printStackTrace();
        }
        Log.e(TAG, "Other Error: " + e.getLocalizedMessage());
    }
    return null;
}

0

আমি বোয়ানের উত্তর নিয়েছি এবং এটি আরও নমনীয় ক্যোয়ারী স্ট্রিং নির্মাতা তৈরি করতে ব্যবহার করেছি যা পিএইচপি-র http_build_query পদ্ধতির মতো তালিকা এবং অ্যারে সমর্থন করে:

public static byte[] httpBuildQueryString(Map<String, Object> postsData) throws UnsupportedEncodingException {
    StringBuilder postData = new StringBuilder();
    for (Map.Entry<String,Object> param : postsData.entrySet()) {
        if (postData.length() != 0) postData.append('&');

        Object value = param.getValue();
        String key = param.getKey();

        if(value instanceof Object[] || value instanceof List<?>)
        {
            int size = value instanceof Object[] ? ((Object[])value).length : ((List<?>)value).size();
            for(int i = 0; i < size; i++)
            {
                Object val = value instanceof Object[] ? ((Object[])value)[i] : ((List<?>)value).get(i);
                if(i>0) postData.append('&');
                postData.append(URLEncoder.encode(key + "[" + i + "]", "UTF-8"));
                postData.append('=');            
                postData.append(URLEncoder.encode(String.valueOf(val), "UTF-8"));
            }
        }
        else
        {
            postData.append(URLEncoder.encode(key, "UTF-8"));
            postData.append('=');            
            postData.append(URLEncoder.encode(String.valueOf(value), "UTF-8"));
        }
    }
    return postData.toString().getBytes("UTF-8");
}

0

যাদের পিএইচপি পৃষ্ঠায় অনুরোধটি পেতে সমস্যা হচ্ছে For _POST ব্যবহার করে কারণ আপনি কী-মূল্যের জোড় আশা করছেন:

সমস্ত উত্তর যেখানে খুব সহায়ক, যদিও আমার কোন স্ট্রিংটি পোস্ট করা উচিত তা সম্পর্কে কিছু প্রাথমিক বোঝার অভাব ছিল, যেহেতু পুরানো অ্যাপাচে এইচটিটিপি ক্লায়েন্টে আমি ব্যবহার করেছি

new UrlEncodedFormEntity(nameValuePairs); (Java)

এবং তারপরে পিএইচপি-তে $ _POST ব্যবহার করতে পারলে কী-মান জোড়া পাওয়া যায়।

আমার বুঝতে এখন পোস্ট করার আগে একজন নিজেই সেই স্ট্রিংটি তৈরি করেছে। সুতরাং স্ট্রিংয়ের মতো দেখতে প্রয়োজন

val data = "key1=val1&key2=val2"

তবে পরিবর্তে কেবল এটি পোস্ট করা url- এ যুক্ত করুন (শিরোনামে)।

বিকল্পটি পরিবর্তে একটি জসন-স্ট্রিং ব্যবহার করা হবে:

val data = "{\"key1\":\"val1\",\"key2\":\"val2\"}" // {"key1":"val1","key2":"val2"}

এবং এটিকে _P _POST ছাড়াই পিএইচপি তে টানুন:

$json_params = file_get_contents('php://input');
// echo_p("Data: $json_params");
$data = json_decode($json_params, true);

এখানে আপনি কোটলিনে একটি নমুনা কোড পাবেন:

class TaskDownloadTest : AsyncTask<Void, Void, Void>() {
    override fun doInBackground(vararg params: Void): Void? {
        var urlConnection: HttpURLConnection? = null

        try {

            val postData = JsonObject()
            postData.addProperty("key1", "val1")
            postData.addProperty("key2", "val2")

            // reformat json to key1=value1&key2=value2
            // keeping json because I may change the php part to interpret json requests, could be a HashMap instead
            val keys = postData.keySet()
            var request = ""
            keys.forEach { key ->
                // Log.i("data", key)
                request += "$key=${postData.get(key)}&"
            }
            request = request.replace("\"", "").removeSuffix("&")
            val requestLength = request.toByteArray().size
            // Warning in Android 9 you need to add a line in the application part of the manifest: android:usesCleartextTraffic="true"
            // /programming/45940861/android-8-cleartext-http-traffic-not-permitted
            val url = URL("http://10.0.2.2/getdata.php")
            urlConnection = url.openConnection() as HttpURLConnection
            // urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded") // apparently default
            // Not sure what these are for, I do not use them
            // urlConnection.setRequestProperty("Content-Type", "application/json")
            // urlConnection.setRequestProperty("Key","Value")
            urlConnection.readTimeout = 5000
            urlConnection.connectTimeout = 5000
            urlConnection.requestMethod = "POST"
            urlConnection.doOutput = true
            // urlConnection.doInput = true
            urlConnection.useCaches = false
            urlConnection.setFixedLengthStreamingMode(requestLength)
            // urlConnection.setChunkedStreamingMode(0) // if you do not want to handle request length which is fine for small requests

            val out = urlConnection.outputStream
            val writer = BufferedWriter(
                OutputStreamWriter(
                    out, "UTF-8"
                )
            )
            writer.write(request)
            // writer.write("{\"key1\":\"val1\",\"key2\":\"val2\"}") // {"key1":"val1","key2":"val2"} JsonFormat or just postData.toString() for $json_params=file_get_contents('php://input'); json_decode($json_params, true); in php
            // writer.write("key1=val1&key2=val2") // key=value format for $_POST in php
            writer.flush()
            writer.close()
            out.close()

            val code = urlConnection.responseCode
            if (code != 200) {
                throw IOException("Invalid response from server: $code")
            }

            val rd = BufferedReader(
                InputStreamReader(
                    urlConnection.inputStream
                )
            )
            var line = rd.readLine()
            while (line != null) {
                Log.i("data", line)
                line = rd.readLine()
            }
        } catch (e: Exception) {
            e.printStackTrace()
        } finally {
            urlConnection?.disconnect()
        }

        return null
    }
}

-3

প্রদর্শিত হয় যে আপনাকে connection.getOutputStream()"কমপক্ষে একবার" কল করতে হবে (পাশাপাশি)setDoOutput(true)মনে হয় এটি একটি পোষ্ট হিসাবে বিবেচনা করার জন্য আপনাকে ) করতে হবে।

সুতরাং সর্বনিম্ন প্রয়োজনীয় কোডটি হ'ল:

    URL url = new URL(urlString);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    //connection.setRequestMethod("POST"); this doesn't seem to do anything at all..so not useful
    connection.setDoOutput(true); // set it to POST...not enough by itself however, also need the getOutputStream call...
    connection.connect();
    connection.getOutputStream().close(); 

এমনকি আপনি আশ্চর্যজনকভাবে urlstring এ "জিইটি" স্টাইলের পরামিতি ব্যবহার করতে পারেন। যদিও এটি জিনিস গুলিয়ে ফেলতে পারে।

আপনি নেমভালিউয়ারটি আপাতভাবে ব্যবহার করতে পারেন ।


পোষ্ট প্যারামিটারগুলি কোথায় ...?
ইউশা আলেয়াউব

লোকেরা কেন এটিকে নিম্নচাপ দিচ্ছে? এটি POST এ কীভাবে করা যায় তার জন্য একটি নোট, যদিও প্যারামিটার ছাড়াই ... (অর্থাত্ কোনও পেলোড0 ... না
রজারডপ্যাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.