পোস্টের অনুরোধ জেসন ডেটা জাভা এইচটিটিপিআরল সংযোগ প্রেরণ করুন


101

আমি একটি জাভা কোড তৈরি করেছি যা নীচের সিআরএলটি ইউআরএল এবং এইচটিটিপিউরল কানেকশন ব্যবহার করে জাভা কোডে রূপান্তর করে। কার্লটি হ'ল:

curl -i 'http://url.com' -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d '{"auth": { "passwordCredentials": {"username": "adm", "password": "pwd"},"tenantName":"adm"}}'

আমি এই কোডটি লিখেছি তবে এটি সর্বদা এইচটিটিপি কোডকে 400 টি অনুরোধ জানায়। যা অনুপস্থিত তা আমি পাইনি।

String url="http://url.com";
URL object=new URL(url);

HttpURLConnection con = (HttpURLConnection) object.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestMethod("POST");

JSONObject cred   = new JSONObject();
JSONObject auth   = new JSONObject();
JSONObject parent = new JSONObject();

cred.put("username","adm");
cred.put("password", "pwd");

auth.put("tenantName", "adm");
auth.put("passwordCredentials", cred.toString());

parent.put("auth", auth.toString());

OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
wr.write(parent.toString());
wr.flush();

//display what returns the POST request

StringBuilder sb = new StringBuilder();  
int HttpResult = con.getResponseCode(); 
if (HttpResult == HttpURLConnection.HTTP_OK) {
    BufferedReader br = new BufferedReader(
            new InputStreamReader(con.getInputStream(), "utf-8"));
    String line = null;  
    while ((line = br.readLine()) != null) {  
        sb.append(line + "\n");  
    }
    br.close();
    System.out.println("" + sb.toString());  
} else {
    System.out.println(con.getResponseMessage());  
}  

4
জাভা ভার্বোসটির জন্য দুর্দান্ত চিত্রণ।
ইউরিন

উত্তর:


165

আপনার JSON সঠিক নয়। পরিবর্তে

JSONObject cred = new JSONObject();
JSONObject auth=new JSONObject();
JSONObject parent=new JSONObject();
cred.put("username","adm");
cred.put("password", "pwd");
auth.put("tenantName", "adm");
auth.put("passwordCredentials", cred.toString()); // <-- toString()
parent.put("auth", auth.toString());              // <-- toString()

OutputStreamWriter wr= new OutputStreamWriter(con.getOutputStream());
wr.write(parent.toString());

লিখুন

JSONObject cred = new JSONObject();
JSONObject auth=new JSONObject();
JSONObject parent=new JSONObject();
cred.put("username","adm");
cred.put("password", "pwd");
auth.put("tenantName", "adm");
auth.put("passwordCredentials", cred);
parent.put("auth", auth);

OutputStreamWriter wr= new OutputStreamWriter(con.getOutputStream());
wr.write(parent.toString());

সুতরাং, বাহ্যিক বস্তুর জন্য JSONObject.toString () কেবল একবার কল করা উচিত।

আরেকটি জিনিস (সম্ভবত আপনার সমস্যা নয়, তবে আমি এটি উল্লেখ করতে চাই):

এনকোডিংয়ের সমস্যায় না চলে তা নিশ্চিত হওয়ার জন্য আপনার এনকোডিংটি নির্দিষ্ট করা উচিত, যদি তা না হয় UTF-8:

con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
con.setRequestProperty("Accept", "application/json");

// ...

OutputStream os = con.getOutputStream();
os.write(parent.toString().getBytes("UTF-8"));
os.close();

7
আমার ক্ষেত্রে অনুরোধের সম্পত্তিটির বিষয়বস্তু নির্ধারণ করা অত্যন্ত গুরুত্বপূর্ণ ছিল:con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
মোরি

কিছুই আমার জন্য কাজ করছে না। আমি ইনপুটটি পাঠাচ্ছি তবে এপিআই সাইডে আমি ফাঁকা পাচ্ছি।
আদর্শ সিং

36
private JSONObject uploadToServer() throws IOException, JSONException {
            String query = "https://example.com";
            String json = "{\"key\":1}";

            URL url = new URL(query);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setRequestMethod("POST");

            OutputStream os = conn.getOutputStream();
            os.write(json.getBytes("UTF-8"));
            os.close();

            // read the response
            InputStream in = new BufferedInputStream(conn.getInputStream());
            String result = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
            JSONObject jsonObject = new JSONObject(result);


            in.close();
            conn.disconnect();

            return jsonObject;
    }

16

আপনি সংযুক্তির জন্য এই কোডটি ব্যবহার করতে পারেন এবং HTTP এবং json ব্যবহার করে অনুরোধ করতে পারেন

try {

        URL url = new URL("https://www.googleapis.com/youtube/v3/playlistItems?part=snippet"
                + "&key=AIzaSyAhONZJpMCBqCfQjFUj21cR2klf6JWbVSo"
                + "&access_token=" + access_token);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/json");

        String input = "{ \"snippet\": {\"playlistId\": \"WL\",\"resourceId\": {\"videoId\": \""+videoId+"\",\"kind\": \"youtube#video\"},\"position\": 0}}";

        OutputStream os = conn.getOutputStream();
        os.write(input.getBytes());
        os.flush();

        if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) {
            throw new RuntimeException("Failed : HTTP error code : "
                + conn.getResponseCode());
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(
                (conn.getInputStream())));

        String output;
        System.out.println("Output from Server .... \n");
        while ((output = br.readLine()) != null) {
            System.out.println(output);
        }

        conn.disconnect();

      } catch (MalformedURLException e) {

        e.printStackTrace();

      } catch (IOException e) {

        e.printStackTrace();

     }

6

সঠিক উত্তর ভাল, কিন্তু

OutputStreamWriter wr= new OutputStreamWriter(con.getOutputStream());
wr.write(parent.toString());

না আমার জন্য কাজ এটা পরিবর্তে, ব্যবহার :

byte[] outputBytes = rootJsonObject.getBytes("UTF-8");
OutputStream os = con.getOutputStream();
os.write(outputBytes);

এটি আপনার পক্ষে কার্যকর হয়নি কারণ আপনি আউটপুট স্ট্রিম রাইটারটি বন্ধ করতে ভুলে গেছেন
মণ্ডল

2

আমার অনুরূপ সমস্যা ছিল, আমি 400 পাচ্ছিলাম, খারাপ অনুরোধ কেবল পুটকেই, যেখানে পোষ্ট অনুরোধটি পুরোপুরি ঠিক ছিল।

নীচে কোডটি পোস্টের জন্য সূক্ষ্মভাবে কাজ করেছে তবে পুটের জন্য বিএডি অনুরোধ দিচ্ছিল:

conn.setRequestProperty("Content-Type", "application/json");
os.writeBytes(json);

নীচে পরিবর্তনগুলি করার পরে POST এবং PUT উভয়ের জন্যই কাজ করে

conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
os.write(json.getBytes("UTF-8"));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.