9 ответов:
можно использовать Ява.чистая.HttpUrlConnection.
пример (отсюда), с улучшениями. Включено в случае гнили ссылки:
public static String executePost(String targetURL, String urlParameters) { HttpURLConnection connection = null; try { //Create connection URL url = new URL(targetURL); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("Content-Length", Integer.toString(urlParameters.getBytes().length)); connection.setRequestProperty("Content-Language", "en-US"); connection.setUseCaches(false); connection.setDoOutput(true); //Send request DataOutputStream wr = new DataOutputStream ( connection.getOutputStream()); wr.writeBytes(urlParameters); wr.close(); //Get Response InputStream is = connection.getInputStream(); BufferedReader rd = new BufferedReader(new InputStreamReader(is)); StringBuilder response = new StringBuilder(); // or StringBuffer if Java version 5+ String line; while ((line = rd.readLine()) != null) { response.append(line); response.append('\r'); } rd.close(); return response.toString(); } catch (Exception e) { e.printStackTrace(); return null; } finally { if (connection != null) { connection.disconnect(); } } }
import java.net.*; import java.io.*; public class URLConnectionReader { public static void main(String[] args) throws Exception { URL yahoo = new URL("http://www.yahoo.com/"); URLConnection yc = yahoo.openConnection(); BufferedReader in = new BufferedReader( new InputStreamReader( yc.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close(); } }
Я знаю, что другие будут рекомендовать http-клиент Apache, но это добавляет сложности (т. е. больше вещей, которые могут пойти не так), что редко гарантируется. Для простой задачи,
java.net.URLбудет делать.URL url = new URL("http://www.y.com/url"); InputStream is = url.openStream(); try { /* Now read the retrieved document from the stream. */ ... } finally { is.close(); }
Apache HttpComponents. Примеры для двух модулей - HttpCore и HttpClient вы сразу же начнете.
Не то, что HttpUrlConnection является плохим выбором, HttpComponents будет абстрагировать много утомительного кодирования. Я бы рекомендовал это, если вы действительно хотите поддерживать много HTTP-серверов / клиентов с минимальным кодом. Кстати, HttpCore может быть использован для приложений (клиентов или серверов) с минимумом функциональность, в то время как HttpClient должен использоваться для клиентов, которым требуется поддержка нескольких схем аутентификации, поддержка файлов cookie и т. д.
вот полная программа Java 7:
class GETHTTPResource { public static void main(String[] args) throws Exception { try (java.util.Scanner s = new java.util.Scanner(new java.net.URL("http://tools.ietf.org/rfc/rfc768.txt").openStream())) { System.out.println(s.useDelimiter("\A").next()); } } }новый try-with-resources автоматически закроет сканер, который автоматически закроет входной поток.
Google java http client имеет хороший API для http-запросов. Вы можете легко добавить поддержку JSON и т. д. Хотя для простого запроса это может быть излишним.
import com.google.api.client.http.GenericUrl; import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpResponse; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import java.io.IOException; import java.io.InputStream; public class Network { static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); public void getRequest(String reqUrl) throws IOException { GenericUrl url = new GenericUrl(reqUrl); HttpRequest request = HTTP_TRANSPORT.createRequestFactory().buildGetRequest(url); HttpResponse response = request.execute(); System.out.println(response.getStatusCode()); InputStream is = response.getContent(); int ch; while ((ch = is.read()) != -1) { System.out.print((char) ch); } response.disconnect(); } }
Это поможет вам. Не забудьте добавить банку
HttpClient.jarв classpath.import java.io.FileOutputStream; import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; public class MainSendRequest { static String url = "http://localhost:8080/HttpRequestSample/RequestSend.jsp"; public static void main(String[] args) { //Instantiate an HttpClient HttpClient client = new HttpClient(); //Instantiate a GET HTTP method PostMethod method = new PostMethod(url); method.setRequestHeader("Content-type", "text/xml; charset=ISO-8859-1"); //Define name-value pairs to set into the QueryString NameValuePair nvp1= new NameValuePair("firstName","fname"); NameValuePair nvp2= new NameValuePair("lastName","lname"); NameValuePair nvp3= new NameValuePair("email","[email protected]"); method.setQueryString(new NameValuePair[]{nvp1,nvp2,nvp3}); try{ int statusCode = client.executeMethod(method); System.out.println("Status Code = "+statusCode); System.out.println("QueryString>>> "+method.getQueryString()); System.out.println("Status Text>>>" +HttpStatus.getStatusText(statusCode)); //Get data as a String System.out.println(method.getResponseBodyAsString()); //OR as a byte array byte [] res = method.getResponseBody(); //write to file FileOutputStream fos= new FileOutputStream("donepage.html"); fos.write(res); //release connection method.releaseConnection(); } catch(IOException e) { e.printStackTrace(); } } }
вы можете использовать сокет для этого, как
String host = "www.yourhost.com"; Socket socket = new Socket(host, 80); String request = "GET / HTTP/1.0\r\n\r\n"; OutputStream os = socket.getOutputStream(); os.write(request.getBytes()); os.flush(); InputStream is = socket.getInputStream(); int ch; while( (ch=is.read())!= -1) System.out.print((char)ch); socket.close();
есть отличная ссылка на отправку запроса POST здесь на примере депо::
try { // Construct data String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8"); // Send data URL url = new URL("http://hostname:80/cgi"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(data); wr.flush(); // Get the response BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = rd.readLine()) != null) { // Process line... } wr.close(); rd.close(); } catch (Exception e) { }Если вы хотите отправить запрос GET, вы можете немного изменить код в соответствии с вашими потребностями. В частности, вы должны добавить параметры внутри конструктора URL. Затем, также прокомментируйте это
wr.write(data);одна вещь, которая не написана, и вы должны остерегаться, это тайм-ауты. Особенно если вы хотите использовать его в веб-сервисах, вы должны установить тайм-ауты, в противном случае приведенный выше код будет ждать бесконечно или очень долго, по крайней мере, и это то, что вы предположительно не хотите.
тайм-ауты устанавливаются так
conn.setReadTimeout(2000);входной параметр в миллисекундах
Comments