কীভাবে PUT, HTTP অনুরোধটি HTTP URL সংযোগে মুছে দেবেন?


132

আমি জানতে চাই যে java.net.HttpURLConnectionএইচটিটিপি-ভিত্তিক ইউআরএল-এর মাধ্যমে PUT, মুছে ফেলার অনুরোধ (ব্যবহারিকভাবে) প্রেরণ করা সম্ভব কিনা ।

আমি জেট, পোস্ট, ট্র্যাক, বিকল্পগুলির অনুরোধগুলি কীভাবে প্রেরণ করব তা বর্ণনা করে এতগুলি নিবন্ধ পড়েছি তবে এখনও আমি এমন কোনও নমুনা কোড পাই নি যা সফলভাবে পুট এবং ডিলেট অনুরোধগুলি সম্পাদন করে।


2
আপনি যে কোডটি ব্যবহার করার চেষ্টা করেছিলেন তা কি আমাদের দেখাতে পারেন?
আকনারোকড

উত্তর:


177

একটি HTTP পুট সম্পাদন করতে:

URL url = new URL("http://www.example.com/resource");
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setRequestMethod("PUT");
OutputStreamWriter out = new OutputStreamWriter(
    httpCon.getOutputStream());
out.write("Resource content");
out.close();
httpCon.getInputStream();

একটি HTTP মোছা সম্পাদন করতে:

URL url = new URL("http://www.example.com/resource");
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setRequestProperty(
    "Content-Type", "application/x-www-form-urlencoded" );
httpCon.setRequestMethod("DELETE");
httpCon.connect();

1
হ্যাঁ. এই সমস্ত জিনিস সম্ভব তবে আপনার মেল / ব্লগ সরবরাহকারী দ্বারা সমর্থিত এপিআই এর উপর নির্ভর করে।
ম্যাথু মারডোক

5
হ্যালো, আমি সঙ্গে যন্ত্রণার হচ্ছে delete। আমি যখন এই কোডটি এখানে থাকি তখন সত্যিই কিছুই হয় না, অনুরোধটি প্রেরণ করা হয় না। অনুরোধটি যখন করা হয় তখন একই অবস্থা post, তবে সেখানে আমি উদাহরণ হিসাবে ব্যবহার করতে পারি httpCon.getContent()যা অনুরোধটি ট্রিগার করে। তবে এটি httpCon.connect()আমার মেশিনে কোনও কিছুই ট্রিগার করে না :-)
কবিবিচেক

7
উপরের উদাহরণগুলিতে, আমি বিশ্বাস করি যে অনুরোধটি প্রকৃতপক্ষে প্রেরণের জন্য আপনাকে শেষদিকে httpCon.getInputStream () কল করতে হবে।
এরিক স্মিথ

3
আমি পেয়েছি "java.net.ProtocolException: DELETE লেখা সমর্থন করে না"
Kimo_do

1
@edisusanto নামক সংস্থানটি (ইউআরএল দ্বারা নির্দেশিত) হ'ল ডেটা মুছে ফেলা হবে।
ম্যাথু মারডোক

24

এটি আমার পক্ষে এভাবে কাজ করেছিল:

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("DELETE");
int responseCode = connection.getResponseCode();

11
public  HttpURLConnection getHttpConnection(String url, String type){
        URL uri = null;
        HttpURLConnection con = null;
        try{
            uri = new URL(url);
            con = (HttpURLConnection) uri.openConnection();
            con.setRequestMethod(type); //type: POST, PUT, DELETE, GET
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setConnectTimeout(60000); //60 secs
            con.setReadTimeout(60000); //60 secs
            con.setRequestProperty("Accept-Encoding", "Your Encoding");
            con.setRequestProperty("Content-Type", "Your Encoding");
        }catch(Exception e){
            logger.info( "connection i/o failed" );
        }
        return con;
}

তারপরে আপনার কোডে:

public void yourmethod(String url, String type, String reqbody){
    HttpURLConnection con = null;
    String result = null;
    try {
        con = conUtil.getHttpConnection( url , type);
    //you can add any request body here if you want to post
         if( reqbody != null){  
                con.setDoInput(true);
                con.setDoOutput(true);
                DataOutputStream out = new  DataOutputStream(con.getOutputStream());
                out.writeBytes(reqbody);
                out.flush();
                out.close();
            }
        con.connect();
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String temp = null;
        StringBuilder sb = new StringBuilder();
        while((temp = in.readLine()) != null){
            sb.append(temp).append(" ");
        }
        result = sb.toString();
        in.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        logger.error(e.getMessage());
    }
//result is the response you get from the remote side
}

'Java.io.IOException: অসমর্থিত পদ্ধতি: put' inJ2me sdk লগার
কোডটোলাইফ

8

আমি @ অ্যাডিটিশিম এবং এইচটিপিপ্লাইয়েন্টের পরামর্শ দেওয়া বাকী লোকেদের সাথে একমত।

আমি এইচটিটিপিআরএল সংযোগের সাথে পরিষেবাটি বিশ্রামের জন্য একটি সাধারণ কল করার চেষ্টা করে সময় ব্যয় করেছি এবং এটি আমাকে বিশ্বাস করতে পারেনি এবং এর পরে আমি এইচটিটিপিপ্লিনেন্টের সাথে চেষ্টা করেছি এবং এটি সত্যই আরও সহজ, বোধগম্য এবং সুন্দর।

পুট এইচপি কল করার কোডের একটি উদাহরণ নিম্নরূপ:

DefaultHttpClient httpClient = new DefaultHttpClient();

HttpPut putRequest = new HttpPut(URI);

StringEntity input = new StringEntity(XML);
input.setContentType(CONTENT_TYPE);

putRequest.setEntity(input);
HttpResponse response = httpClient.execute(putRequest);

এই জন্য আপনাকে ধন্যবাদ বলতে চেয়েছিলেন। ব্যবহার আমার কোড পেতে চেষ্টা অনেক ঘন্টা ব্যয় করা HttpURLConnectionকাজ, কিন্তু একটি বিজোড় ত্রুটির মধ্যে বিশেষভাবে চলমান, রাখা: cannot retry due to server authentication, in streaming mode। আপনার পরামর্শ অনুসরণ আমার জন্য কাজ করে। আমি বুঝতে পারি যে এটি সঠিকভাবে প্রশ্নের উত্তর দেয় না, যা ব্যবহার করতে বলে HttpURLConnection, তবে আপনার উত্তর আমাকে সাহায্য করেছিল।
টম কাতুল্লো

@ এর পরিবর্তে এইচটিপিপি্লিয়েন্টবিল্ডার ব্যবহার করুন
ওয়াল্ডেমার ওসিয়াস্কি

3

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


3

এইচটিএমএলে সঠিকভাবে একটি পুট করার জন্য আপনাকে এটিকে চেষ্টা / ধরা দিয়ে ঘিরে থাকতে হবে:

try {
    url = new URL("http://www.example.com/resource");
    HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
    httpCon.setDoOutput(true);
    httpCon.setRequestMethod("PUT");
    OutputStreamWriter out = new OutputStreamWriter(
        httpCon.getOutputStream());
    out.write("Resource content");
    out.close();
    httpCon.getInputStream();
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (ProtocolException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

1

এমনকি রেস্ট টেম্পলেট একটি বিকল্প হতে পারে:

String payload = "<?xml version=\"1.0\" encoding=\"UTF-8\"?<CourierServiceabilityRequest>....";
    RestTemplate rest = new RestTemplate();

    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "application/xml");
    headers.add("Accept", "*/*");
    HttpEntity<String> requestEntity = new HttpEntity<String>(payload, headers);
    ResponseEntity<String> responseEntity =
            rest.exchange(url, HttpMethod.PUT, requestEntity, String.class);

     responseEntity.getBody().toString();

এটি SO এ আমি দেখেছি সেরা উত্তরগুলির মধ্যে একটি।
thonnor

0

মুছে ফেলার এবং অনুরোধ করার সহজ উপায় রয়েছে, আপনি কেবল _methodনিজের পোস্টের অনুরোধে একটি " " পরামিতি যুক্ত করে এটির মানটির জন্য " PUT" বা " DELETE" লিখতে পারেন !


-1

আমি অ্যাপাচি HTTPClient সুপারিশ করব recommend


9
আপনি এইচটিটিপি ক্লিনেন্টের সুপারিশ করবেন কেন? এটা বিশাল. মানে - আকারে।
জয়য়ারজো

1
@ জয়য়ারজো, এটি অ্যান্ড্রয়েড এসডিকে অংশ part
জামেল

9
@ জামেল: অ্যান্ড্রয়েড ছবিটি ঠিক কোথায় প্রবেশ করেছে?
টালোনেক্স

1
@ ট্যালোনেক্স: আমার কোনও ধারণা নেই। আমার ভুল. অ্যান্ড্রয়েড বিকাশে আমাকে কবর দেওয়া হয়েছিল তাই বিভ্রান্তি।
জামেল

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