JAVAからHTTP要求を送る4つの方法をまとめます。


ソースコード:http://github.com/lovewenyo/HttpDemo
1.HttpURLConnection
JDK原生が提供したnetを使って、他のjarカバンは要りません。
HttpURLConnectionはURLConnectionのサブクラスで、もっと多くの方法を提供して、使うのがもっと便利です。

package httpURLConnection;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import java.net.HttpURLConnection;
import java.net.URL;

public class HttpURLConnectionHelper {

 public static String sendRequest(String urlParam,String requestType) {

  HttpURLConnection con = null; 

  BufferedReader buffer = null; 
  StringBuffer resultBuffer = null; 

  try {
   URL url = new URL(urlParam); 
   //      
   con = (HttpURLConnection) url.openConnection(); 
   //      
   con.setRequestMethod(requestType); 
   //                   
   con.setRequestProperty("Content-Type", "application/json;charset=GBK"); 
   //    
   con.setDoOutput(true);
   //    
   con.setDoInput(true);
   //     
   con.setUseCaches(false);
   //     
   int responseCode = con.getResponseCode();

   if(responseCode == HttpURLConnection.HTTP_OK){
    //     
    InputStream inputStream = con.getInputStream();
    //          
    resultBuffer = new StringBuffer();
    String line;
    buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK"));
    while ((line = buffer.readLine()) != null) {
     resultBuffer.append(line);
    }
    return resultBuffer.toString();
   }

  }catch(Exception e) {
   e.printStackTrace();
  }
  return "";
 }
 public static void main(String[] args) {

  String url ="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96";
  System.out.println(sendRequest(url,"POST"));
 }
}
2.URLConnection
JDK原生が提供したnetを使って、他のjarカバンは要りません。
HttpURLConnectionをお勧めします。

package uRLConnection;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class URLConnectionHelper {

 public static String sendRequest(String urlParam) {

  URLConnection con = null; 

  BufferedReader buffer = null; 
  StringBuffer resultBuffer = null; 

  try {
    URL url = new URL(urlParam); 
    con = url.openConnection(); 

   //                   
   con.setRequestProperty("Content-Type", "application/json;charset=GBK"); 
   //    
   con.setDoOutput(true);
   //    
   con.setDoInput(true);
   //     
   con.setUseCaches(false);
   //     
   InputStream inputStream = con.getInputStream();
   //          
   resultBuffer = new StringBuffer();
   String line;
   buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK"));
   while ((line = buffer.readLine()) != null) {
    resultBuffer.append(line);
   }
   return resultBuffer.toString();

  }catch(Exception e) {
   e.printStackTrace();
  }

  return "";
 }
 public static void main(String[] args) {
  String url ="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96";
  System.out.println(sendRequest(url));
 }
}
3.Http Client
使いやすいです。個人的にはこのような方式が好きですが、第三者のカバンに依存しています。

<!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient -->
<dependency>
 <groupId>commons-httpclient</groupId>
 <artifactId>commons-httpclient</artifactId>
 <version>3.1</version>
</dependency

package httpClient;

import java.io.IOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

public class HttpClientHelper {
 public static String sendPost(String urlParam) throws HttpException, IOException {
  //   httpClient    
  HttpClient httpClient = new HttpClient();
  //   httpClient           :15000  
  httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
  //   post        
  PostMethod postMethod = new PostMethod(urlParam);
  //   post      
  postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
  postMethod.addRequestHeader("Content-Type", "application/json");

  httpClient.executeMethod(postMethod);

  String result = postMethod.getResponseBodyAsString();
  postMethod.releaseConnection();
  return result;
 }
 public static String sendGet(String urlParam) throws HttpException, IOException {
  //   httpClient    
  HttpClient httpClient = new HttpClient();
  //   httpClient           :15000  
  httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
  //   GET        
  GetMethod getMethod = new GetMethod(urlParam);
  //   post      
  getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
  getMethod.addRequestHeader("Content-Type", "application/json");

  httpClient.executeMethod(getMethod);

  String result = getMethod.getResponseBodyAsString();
  getMethod.releaseConnection();
  return result;
 }
 public static void main(String[] args) throws HttpException, IOException {
  String url ="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96";
  System.out.println(sendPost(url));
  System.out.println(sendGet(url));
 }
}
4.ソケット
JDK原生が提供したnetを使って、他のjarカバンは要りません。
使うのが面倒くさいです。

package socket;
import java.io.BufferedInputStream; 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.Socket; 
import java.net.URLEncoder; 

import javax.net.ssl.SSLSocket; 
import javax.net.ssl.SSLSocketFactory; 

public class SocketForHttpTest { 

 private int port; 
 private String host; 
 private Socket socket; 
 private BufferedReader bufferedReader; 
 private BufferedWriter bufferedWriter; 

 public SocketForHttpTest(String host,int port) throws Exception{ 

  this.host = host; 
  this.port = port; 

  /** 
   * http   
   */ 
  // socket = new Socket(this.host, this.port); 

  /** 
   * https   
   */ 
  socket = (SSLSocket)((SSLSocketFactory)SSLSocketFactory.getDefault()).createSocket(this.host, this.port); 


 } 

 public void sendGet() throws IOException{ 
  //String requestUrlPath = "/z69183787/article/details/17580325"; 
  String requestUrlPath = "/";   

  OutputStreamWriter streamWriter = new OutputStreamWriter(socket.getOutputStream()); 
  bufferedWriter = new BufferedWriter(streamWriter);    
  bufferedWriter.write("GET " + requestUrlPath + " HTTP/1.1\r
"); bufferedWriter.write("Host: " + this.host + "\r
"); bufferedWriter.write("\r
"); bufferedWriter.flush(); BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream()); bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8")); String line = null; while((line = bufferedReader.readLine())!= null){ System.out.println(line); } bufferedReader.close(); bufferedWriter.close(); socket.close(); } public void sendPost() throws IOException{ String path = "/"; String data = URLEncoder.encode("name", "utf-8") + "=" + URLEncoder.encode(" ", "utf-8") + "&" + URLEncoder.encode("age", "utf-8") + "=" + URLEncoder.encode("32", "utf-8"); // String data = "name=zhigang_jia"; System.out.println(">>>>>>>>>>>>>>>>>>>>>"+data); OutputStreamWriter streamWriter = new OutputStreamWriter(socket.getOutputStream(), "utf-8"); bufferedWriter = new BufferedWriter(streamWriter); bufferedWriter.write("POST " + path + " HTTP/1.1\r
"); bufferedWriter.write("Host: " + this.host + "\r
"); bufferedWriter.write("Content-Length: " + data.length() + "\r
"); bufferedWriter.write("Content-Type: application/x-www-form-urlencoded\r
"); bufferedWriter.write("\r
"); bufferedWriter.write(data); bufferedWriter.write("\r
"); bufferedWriter.flush(); BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream()); bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8")); String line = null; while((line = bufferedReader.readLine())!= null) { System.out.println(line); } bufferedReader.close(); bufferedWriter.close(); socket.close(); } public static void main(String[] args) throws Exception { /** * http */ //SocketForHttpTest forHttpTest = new SocketForHttpTest("www.baidu.com", 80); /** * https */ SocketForHttpTest forHttpTest = new SocketForHttpTest("www.baidu.com", 443); try { forHttpTest.sendGet(); // forHttpTest.sendPost(); } catch (IOException e) { e.printStackTrace(); } } }
締め括りをつける
ここで、JAVAからHTTPの要求を送る文章について紹介します。JAVAからHTTPの要求内容を送ります。以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。