How to send data (Method Post) using HttpURLConnection – Java

บทนำ (Overview)

จากบทความที่แล้วเราสามารถสร้าง .jar ไฟล์ ที่สามารถเปิดโปรแกรมขึ้นมาใช้งานได้ทันที (Executable .jar) – How to create Executable jar file ต่อมา เราจะทดลองเขียน การส่งข้อมูลระหว่าง “Client” และ “Server” โดย “Server” จะรับค่าจาก “Client” และส่งกลับมาที่ “Client” อีกครั้ง โดยที่ฝั่ง “Client” จะเป็นโปรแกรมเขียนด้วย “Java” และ ฝั่ง “Server” จะเขียนด้วย “php” ซึ่งต้อง “run” บน “Web server”

การส่งข้อมูลจาก “Client” ไปยัง “Server” จะใช้โปรโตคอล “HTTP” ซึ่งใช้ “method” ของ “POST” ในการส่งข้อมูล เพราะฉะนั้น “Server” จะต้องรับข้อมูลจาก “Method” ของ “Post” ให้ได้ด้วยแล้วค่อยส่งกลับค่ามา

 ขั้นตอน (Steps)

  1. เริ่มต้นที่ฝั่ง “Server” เขียนรับค่า “Method POST” จากนั้นส่งค่ากลับคืนโดยใช้ “echo”
    <?php
    	echo "Response from server : ".$_POST["username"]." ".$_POST["password"];
    ?>
    
  2. ทดสอบเรียกใช้งานหน้าเพจบน “Web Server”

    javapost1
    ผลการ Run ไฟล์ PHP ที่ Web Server
  3. จากนั้นมาเขียน “Java” สำหรับฝั่ง “Client” กันโดยให้รับค่า Username และ Password ของผู้ใช้และมีปุ่มสำหรับส่งค่าทั้ง 2 ยัง Server
    
    //swing class for GUI
    import javax.swing.*;
    
    //class for listener
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    
    //Get string from URL
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class clsLogin {
    
    	private JFrame frame;
    	private JTextField txtUser, txtPass;
    	private JButton cmdLogin;
    
    	public void init(){
    		//สร้าง controls
    		frame = new JFrame("Hello Login");//ชื่อหน้าต่าง
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    		txtUser = new JTextField("Username");
    		txtPass = new JTextField("Password");
    		cmdLogin = new JButton("Login at Server-side");
    		cmdKeepPass = new JButton ("Keep password in memory");
    
    		//Set layout
    		frame.getContentPane().setLayout(null);
    		frame.setBounds(200, 200, 450, 300);
    		txtUser.setBounds(50, 50, 200, 25);
    		txtPass.setBounds(50, 75, 200, 25);
    		cmdLogin.setBounds(50, 100, 200, 25);
    
    		//บรรจุ Controls ลง Frame
    		frame.add(txtUser);
    		frame.add(txtPass);
    		frame.add(cmdLogin);
    		frame.setVisible(true);//ให้แสดงหน้าต่าง	
    
    		//สร้าง litener ให้กับปุ่ม
    		cmdLogin.addActionListener(new ActionListener() {
    			//เมื่อ Click ปุ่ม Login
    			public void actionPerformed(ActionEvent arg0) {
    				//String loginJson = jsonCreate();
    				JOptionPane.showMessageDialog(frame,login());
    			}
    
    			private String login(){
    				URL url;
    				try {
    			        url = new URL("http://192.168.202.128/pentest/testOT.php");
    
    			        String Name = txtUser.getText();
    			        String Surname = txtPass.getText();
    
    			        String urlParameters = "username= " + Name + " &password=" + Surname;
    			        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    			        conn.setDoOutput(true);
    			        conn.setDoInput(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(urlParameters.getBytes().length));
    			        conn.setUseCaches (false);
    
    			        DataOutputStream wr = new DataOutputStream(conn.getOutputStream ());
    			        wr.writeBytes(urlParameters);
    			        wr.flush();
    			        wr.close();
    
    			        StringBuilder str = new StringBuilder();
    			        String line;
    			        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    
    					while ((line = reader.readLine()) != null) {
    						str.append(line);
    					}
    
    			        conn.disconnect();
    			        return str.toString();
    
    				} catch (Exception e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    					return null;
    				}
    
    			}
    
    		});
    
    	}
    
    	public static void main(String[] args) {
    		clsLogin obj = new clsLogin();
    		obj.init();
    	}
    }
    
    
  4. ทดสอบ “Run” โปรแกรม และกรอก “Username” และ “Password” จากนั้นคลิกปุ่ม “Login”

    javapost2
    ทดสอบการใช้งาน การส่งผ่านข้อมูลโดยใช้ HTTP Post

ใส่ความเห็น