दिलचस्प पोस्ट
उत्तरदायी बूटस्ट्रैप navbar में केंद्र सामग्री फाइल करने के लिए PHP डाटा-यूआरआई सुडो परिवर्तन पाथ – क्यों? आईई 9 सीमा-त्रिज्या और पृष्ठभूमि ढाल खून बह रहा है विराट गुणों के लिए कैसे काम करता है? स्विफ्ट में एक सरणी में एक तत्व जोड़ें गतिशील रूप से डेटा फ्रेम का चयन करें $ और स्तंभ नामों का एक वेक्टर बड़ी संख्या में पंक्तियों के साथ JTable जनसंख्या एचटीएमएल – गुण बनाम गुण पूंछ- F के एक अजगर समतुल्य को कैसे लागू किया जाए? जावास्क्रिप्ट के साथ सभी कुकीज़ समाशोधन बैच फ़ाइल में विलंबित विस्तार का उदाहरण बटन पर क्लिक किए बिना अनंत फ़्रेम को छोटा करना सी में, sizeof (char) 1, जब 'ए' एक इंट है? कैसे मूल घटक की सीएसएस फ़ाइल से बच्चे के घटकों को स्टाइल करने के लिए?

जावा में HTTP पोस्ट अनुरोध भेजा जा रहा है

इस URL को ग्रहण करने देता है …

http://www.example.com/page.php?id=10 

(यहां आईडी को POST अनुरोध में भेजा जाना चाहिए)

मैं id = 10 सर्वर के page.php पर भेजना चाहता हूं। page.php , जो इसे पोस्ट विधि में स्वीकार करता है।

मैं जावा के भीतर से यह कैसे कर सकता हूं?

मैंने यह कोशिश की:

 URL aaa = new URL("http://www.example.com/page.php"); URLConnection ccc = aaa.openConnection(); 

लेकिन मुझे अभी भी पता नहीं है कि इसे डाक से कैसे भेजना है

वेब के समाधान से एकत्रित समाधान "जावा में HTTP पोस्ट अनुरोध भेजा जा रहा है"

अद्यतित उत्तर:

मूल कक्षा में कुछ कक्षाओं के बाद से, अपाचे HTTP अवयवों के नए संस्करण में पदावनत होने के बाद से, मैं यह अपडेट पोस्ट कर रहा हूं।

वैसे, आप यहां अधिक उदाहरणों के लिए पूर्ण दस्तावेज का उपयोग कर सकते हैं ।

 HttpClient httpclient = HttpClients.createDefault(); HttpPost httppost = new HttpPost("http://www.a-domain.com/foo/"); // Request parameters and other properties. List<NameValuePair> params = new ArrayList<NameValuePair>(2); params.add(new BasicNameValuePair("param-1", "12345")); params.add(new BasicNameValuePair("param-2", "Hello!")); httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); //Execute and get the response. HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); try { // do something useful } finally { instream.close(); } } 

मूल उत्तर:

मैं अपाचे एचटीटीपी क्लाइंट का उपयोग करने की सलाह देता हूं इसका तेज और कार्यान्वयन करना आसान है

 PostMethod post = new PostMethod("http://jakarata.apache.org/"); NameValuePair[] data = { new NameValuePair("user", "joe"), new NameValuePair("password", "bloggs") }; post.setRequestBody(data); // execute method and handle any error responses. ... InputStream in = post.getResponseBodyAsStream(); // handle response. 

अधिक जानकारी के लिए इस यूआरएल की जांच करें: http://hc.apache.org/

 String rawData = "id=10"; String type = "application/x-www-form-urlencoded"; String encodedData = URLEncoder.encode( rawData, "UTF-8" ); URL u = new URL("http://www.example.com/page.php"); HttpURLConnection conn = (HttpURLConnection) u.openConnection(); conn.setDoOutput(true); conn.setRequestMethod("POST"); conn.setRequestProperty( "Content-Type", type ); conn.setRequestProperty( "Content-Length", String.valueOf(encodedData.length())); OutputStream os = conn.getOutputStream(); os.write(encodedData.getBytes()); 

एक पोस्ट अनुरोध भेजा जा रहा है वेनिला जावा में आसान है। URL साथ शुरू, हमें URLURLConnection url.openConnection(); का उपयोग कर url.openConnection(); URLConnection परिवर्तित करने की जरूरत है url.openConnection(); । इसके बाद, हमें इसे HttpURLConnection डालने की आवश्यकता है, इसलिए हम अपनी विधि सेट करने के लिए इसकी सेट- 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); 

फिर हमें यह बताने की ज़रूरत है कि हम क्या भेजना चाहते हैं:

एक सरल रूप भेजना

एक एचटीटीपी फॉर्म से आने वाला सामान्य पोस्ट एक अच्छी तरह से परिभाषित प्रारूप है। हमें अपने इनपुट को इस प्रारूप में कनवर्ट करना होगा:

 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 भेजा जा रहा है

हम json का उपयोग कर 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() 

याद रखें कि विभिन्न सर्वर JSON के लिए अलग-अलग सामग्री-प्रकार स्वीकार करते हैं, यह प्रश्न देखें।


जावा पोस्ट के साथ फ़ाइलें भेजना

फ़ाइलों को भेजने से निपटने के लिए अधिक चुनौतीपूर्ण माना जा सकता है क्योंकि प्रारूप अधिक जटिल है हम फाइल को स्ट्रिंग के रूप में भेजने के लिए समर्थन भी जोड़ते हैं, क्योंकि हम फ़ाइल को पूरी तरह से स्मृति में बफर नहीं करना चाहते।

इसके लिए, हम कुछ सहायक विधियों को परिभाषित करते हैं:

 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() 

पहला जवाब महान था, लेकिन मुझे जावा कंपाइलर त्रुटियों से बचने के लिए प्रयास / पकड़ जोड़ना पड़ा।
साथ ही, मुझे जावा लाइब्रेरी के साथ HttpResponse को पढ़ने के लिए परेशानी थी।

यहां अधिक पूर्ण कोड है:

 /* * Create the POST request */ HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost("http://example.com/"); // Request parameters and other properties. List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("user", "Bob")); try { httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); } catch (UnsupportedEncodingException e) { // writing error to Log e.printStackTrace(); } /* * Execute the HTTP Request */ try { HttpResponse response = httpClient.execute(httpPost); HttpEntity respEntity = response.getEntity(); if (respEntity != null) { // EntityUtils to get the response content String content = EntityUtils.toString(respEntity); } } catch (ClientProtocolException e) { // writing exception to log e.printStackTrace(); } catch (IOException e) { // writing exception to log e.printStackTrace(); } 

अपाचे HTTP अवयव का उपयोग करने का एक सरल तरीका है

 Request.Post("http://www.example.com/page.php") .bodyForm(Form.form().add("id", "10").build()) .execute() .returnContent(); 

फ्लुअन्ट एपीआई पर एक नज़र डालें

पोस्टिंग कोड जो पोस्ट के अनुरोधों में फॉर्म डेटा भेज सकता है और जावा 7 पर भी काम कर सकता है

 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); String host = mUri.getHost(); urlConnection.setRequestMethod("POST"); // PUT is another valid option urlConnection.setDoOutput(true); Map<String,String> arguments = new HashMap<>(); arguments.put("key1", "value"); arguments.put("key2", "value"); StringBuilder sj = new StringBuilder(); for(Map.Entry<String,String> entry : arguments.entrySet()) { sj.append(URLEncoder.encode(entry.getKey(), "UTF-8") + "=" + URLEncoder.encode(entry.getValue(), "UTF-8") + "&"); } byte[] out = sj.toString().getBytes(); urlConnection.setFixedLengthStreamingMode(out.length); urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); urlConnection.connect(); try { OutputStream os = urlConnection.getOutputStream(); os.write(out); } catch (Exception e) { } } 

पोस्ट अनुरोध के साथ पैरामीटर भेजने का सबसे सरल तरीका:

 String postURL = "http://www.example.com/page.php"; HttpPost post = new HttpPost(postURL); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("id", "10")); UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params, "UTF-8"); post.setEntity(ent); HttpClient client = new DefaultHttpClient(); HttpResponse responsePOST = client.execute(post); 

तुमने कर दिया। अब आप responsePOST उपयोग कर सकते हैं responsePOST प्रतिक्रिया सामग्री को स्ट्रिंग के रूप में प्राप्त करें:

 BufferedReader reader = new BufferedReader(new InputStreamReader(responsePOST.getEntity().getContent()), 2048); if (responsePOST != null) { StringBuilder sb = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { System.out.println(" line : " + line); sb.append(line); } String getResponseString = ""; getResponseString = sb.toString(); //use server output getResponseString as string value. } 

HttpURLConnection.setRequestMethod("POST") और HttpURLConnection.setDoOutput(true); कॉल करें HttpURLConnection.setDoOutput(true); असल में केवल उत्तरार्द्ध के रूप में आवश्यक है POST तो डिफ़ॉल्ट विधि बन जाता है

मैं apache http api पर निर्मित http- अनुरोध का उपयोग करने की सिफारिश करता हूं

 HttpRequest<String> httpRequest = HttpRequestBuilder.createPost("http://www.example.com/page.php", String.class) .responseDeserializer(ResponseDeserializer.ignorableDeserializer()).build(); public void send(){ String response = httpRequest.execute("id", "10").get(); }