package PostTest;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class PostTestFrame extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
public PostTestFrame()
{
setSize(WIDTH, HEIGHT);
setTitle("PostTest");
JPanel northPanel = new JPanel();
add(northPanel, BorderLayout.NORTH);
final JComboBox<String> combo = new JComboBox<String>();
for(int i=0;i<countries.length; i+=2)
{
combo.addItem(countries[i]);
}
northPanel.add(combo);
final JTextArea result = new JTextArea();
add(new JScrollPane(result));
JButton getButton = new JButton("Get");
northPanel.add(getButton);
getButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
final String SERVER_URL = "http://www.census.gov/cgi-bin/ipc/idbsprd";
result.setText("");
Map<String, String> post = new HashMap<String,String>();
post.put("tbl", "001");
post.put("cty", countries[2*combo.getSelectedIndex()+1]);
post.put("optyr", "lastest checked");
try
{
result.setText(doPost(SERVER_URL, post));
}
catch(IOException e)
{
result.setText("" + e);
}
}
}).start();
}
});
}
/**
* Creaza request POST si intoarce raspuns de la server.
* @param urlString URL, pe care se face requestu
* @param nameValuePairs Map cu date pentru request
* @return Raspuns de pe servet(luat ori din stream ce intra sau sin stream error)
*/
public static String doPost(String urlString, Map<String, String> nameValuePairs)
throws IOException
{
URL url = new URL(urlString);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
PrintWriter out = new PrintWriter(connection.getOutputStream());
boolean first = true;
for(Map.Entry<String, String> pair : nameValuePairs.entrySet())
{
if(first) first =false;
else out.print('&');
String name = pair.getKey();
String value = pair.getValue();
out.print(name);
out.print('=');
out.print(URLEncoder.encode(value, "UTF-8"));
}
out.close();
Scanner in;
StringBuilder response = new StringBuilder();
try
{
in = new Scanner(connection.getInputStream());
}
catch(IOException e)
{
if(!(connection instanceof HttpURLConnection)) throw e;
InputStream err = ((HttpURLConnection) connection).getErrorStream();
if(err == null) throw e;
in = new Scanner(err);
}
while(in.hasNextLine())
{
response.append(in.nextLine());
response.append("\n");
}
in.close();
return response.toString();
}
private String[] countries = {"China", "Ethiopia", "Haiti", "Luxembourg", "Malta"
, "Pakistan", "Russia", "Serbia", "Spain", "Turkey", "Uganda"
, "USA"};
public static final int WIDTH = 400;
public static final int HEIGHT = 300;
}