3D spaceshooter with online scoreboard, online demos, ship building. Now entirely defunct, but might be resurrected
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

159 lines
4.3 KiB

package net.sector.network.communication;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import net.sector.Constants;
import net.sector.annotations.Unused;
import org.apache.commons.io.FileUtils;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.AbstractHttpMessage;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
/**
* Http connection helper (GET and POST, file download)
*
* @author Ondřej Hruška (MightyPork)
*/
public class HttpHelper {
private static final String UserAgent = "Sector/HttpHelper";
private static final int TIMEOUT_CONNECTION = 3000;
private static final int TIMEOUT_READ = 2000;
/**
* Download file from URL to filesystem
*
* @param remoteFileUrl url
* @param targetFile target file (the file, not only directory!)
* @throws MalformedURLException
* @throws IOException
*/
public static void downloadFile(String remoteFileUrl, String targetFile) throws MalformedURLException, IOException {
downloadFile(remoteFileUrl, new File(targetFile));
}
/**
* Download file from URL to filesystem
*
* @param remoteFileUrl url
* @param targetFile target file (the file, not only directory!)
* @throws MalformedURLException
* @throws IOException
*/
public static void downloadFile(String remoteFileUrl, File targetFile) throws MalformedURLException, IOException {
FileUtils.copyURLToFile(new URL(remoteFileUrl), targetFile, TIMEOUT_CONNECTION, TIMEOUT_READ);
}
/**
* Send a GET request
*
* @param url target URL without GET args
* @param args GET args in key-value map
* @return returned page as input stream
* @throws IOException
*/
@Unused
public static InputStream requestGet(String url, Map<String, Object> args) throws IOException {
// merge the args into a get query
if (args.size() > 0) {
url += "?";
boolean first = true;
for (Entry<String, Object> arg : args.entrySet()) {
if (!first) url += "&";
url += URLEncoder.encode(arg.getKey(), "UTF-8");
url += "=";
url += URLEncoder.encode(arg.getValue().toString(), "UTF-8");
first = false;
}
}
// prepare client
DefaultHttpClient client = getClient();
//HttpProtocolParams.setUserAgent(client.getParams(), UserAgent);
HttpGet request = new HttpGet(url);
addSectorHeaders(request);
// connect
HttpResponse response = client.execute(request);
// get returned content
return response.getEntity().getContent();
}
private static void addSectorHeaders(AbstractHttpMessage request) {
request.addHeader("User-Agent", UserAgent);
request.addHeader("X-SECTOR-VERSION", Constants.VERSION_NUMBER + "");
}
private static DefaultHttpClient getClient() {
DefaultHttpClient client = new DefaultHttpClient();
HttpParams params = client.getParams();
HttpConnectionParams.setConnectionTimeout(params, TIMEOUT_CONNECTION);
HttpConnectionParams.setSoTimeout(params, TIMEOUT_READ);
return client;
}
/**
* Send a POST request
*
* @param url target URL
* @param args POST args in key-value map
* @return returned page as input stream
* @throws IOException
*/
public static InputStream requestPost(String url, Map<String, Object> args) throws IOException {
// prepare client
DefaultHttpClient client = getClient();
HttpPost request = new HttpPost(url);
// put post arguments into the request
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
for (Entry<String, Object> arg : args.entrySet()) {
nameValuePairs.add(new BasicNameValuePair(arg.getKey(), arg.getValue().toString()));
}
request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
addSectorHeaders(request);
// connect
HttpResponse response = client.execute(request);
// get returned content
return response.getEntity().getContent();
}
}