ホームページ  >  記事  >  Java  >  JAVAを使ったhttp通信について詳しく解説

JAVAを使ったhttp通信について詳しく解説

高洛峰
高洛峰オリジナル
2017-01-05 14:26:032215ブラウズ

HTTP通信の概要

HTTP通信には主にPOSTメソッドとGETメソッドの2つのメソッドがあります。前者は、HTTP メッセージ エンティティを介してサーバーにデータを送信します。これは、セキュリティが高く、データ送信サイズに制限がありません。後者は、URL のクエリ文字列をサーバー パラメータに渡し、ブラウザのアドレス バーにプレーン テキストで表示します。機密性が低く、最大 2048 文字を送信できます。ただし、GET リクエストは役に立たないわけではありません。GET リクエストは主にクエリ (リソースの読み取り) に使用され、非常に効率的です。 POST リクエストは、登録、ログイン、その他の高いセキュリティでの操作とデータベースへのデータの書き込みに使用されます。

http 通信には POST と GET 以外にもさまざまな方法があります。 httpリクエストメソッドをご覧ください

エンコード前の準備

エンコードの前に、まずクライアントのパラメータ(名前と年齢)を受け取り、クライアントに応答するサーブレットを作成します。

@WebServlet(urlPatterns={"/demo.do"})
public class DemoServlet extends HttpServlet {
 
  private static final long serialVersionUID = 1L;
 
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
 
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    PrintWriter pw = response.getWriter();
    pw.print("您使用GET方式请求该Servlet。<br />" + "name = " + name + ",age = " + age);
    pw.flush();
    pw.close();
  }
 
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
 
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    PrintWriter pw = response.getWriter();
    pw.print("您使用POST方式请求该Servlet。<br />" + "name = " + name + ",age = " + age);
    pw.flush();
    pw.close();
  }
 
}

JDK を使用して http 通信を実装します

URLConnection を使用して GET リクエストを実装します

java.net.URL オブジェクトをインスタンス化します
URL オブジェクトの openConnection() メソッドを使用して java.net.URLConnection を取得します。 URLConnection オブジェクトの getInputStream () メソッドは入力ストリームを取得します。
はリソースを閉じます。

public void get() throws Exception{
 
  URL url = new URL("http://127.0.0.1/http/demo.do?name=Jack&age=10");
  URLConnection urlConnection = url.openConnection();                          // 打开连接
  BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"utf-8")); // 获取输入流
  String line = null;
  StringBuilder sb = new StringBuilder();
  while ((line = br.readLine()) != null) {
    sb.append(line + "\n");
  }
 
  System.out.println(sb.toString());
}

JAVAを使ったhttp通信について詳しく解説HttpURLConnection を使用して POST リクエストを実装します

java.net.HttpURLConnection は java.net.URL のサブクラスであり、より多くの http 操作 (getXXX および setXXX メソッド) を提供します。一連の HTTP ステータス コードがこのクラスで定義されています:

public void post() throws IOException{
 
  URL url = new URL("http://127.0.0.1/http/demo.do");
  HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
 
  httpURLConnection.setDoInput(true);
  httpURLConnection.setDoOutput(true);    // 设置该连接是可以输出的
  httpURLConnection.setRequestMethod("POST"); // 设置请求方式
  httpURLConnection.setRequestProperty("charset", "utf-8");
 
  PrintWriter pw = new PrintWriter(new BufferedOutputStream(httpURLConnection.getOutputStream()));
  pw.write("name=welcome");          // 向连接中输出数据(相当于发送数据给服务器)
  pw.write("&age=14");
  pw.flush();
  pw.close();
 
  BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(),"utf-8"));
  String line = null;
  StringBuilder sb = new StringBuilder();
  while ((line = br.readLine()) != null) {  // 读取数据
    sb.append(line + "\n");
  }
 
  System.out.println(sb.toString());
}
JAVAを使ったhttp通信について詳しく解説

JAVAを使ったhttp通信について詳しく解説http 通信に httpclient を使用する

httpclient により、JDK での http 通信の実装が大幅に簡素化されます。

Maven 依存関係:

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.3.6</version>
</dependency>

GETリクエスト

public void httpclientGet() throws Exception{
 
  // 创建HttpClient对象
  HttpClient client = HttpClients.createDefault();
 
  // 创建GET请求(在构造器中传入URL字符串即可)
  HttpGet get = new HttpGet("http://127.0.0.1/http/demo.do?name=admin&age=40");
 
  // 调用HttpClient对象的execute方法获得响应
  HttpResponse response = client.execute(get);
 
  // 调用HttpResponse对象的getEntity方法得到响应实体
  HttpEntity httpEntity = response.getEntity();
 
  // 使用EntityUtils工具类得到响应的字符串表示
  String result = EntityUtils.toString(httpEntity,"utf-8");
  System.out.println(result);
}

JAVAを使ったhttp通信について詳しく解説POSTリクエスト

public void httpclientPost() throws Exception{
 
  // 创建HttpClient对象
  HttpClient client = HttpClients.createDefault();
 
  // 创建POST请求
  HttpPost post = new HttpPost("http://127.0.0.1/http/demo.do");
 
  // 创建一个List容器,用于存放基本键值对(基本键值对即:参数名-参数值)
  List<BasicNameValuePair> parameters = new ArrayList<>();
  parameters.add(new BasicNameValuePair("name", "张三"));
  parameters.add(new BasicNameValuePair("age", "25"));
 
  // 向POST请求中添加消息实体
  post.setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));
 
  // 得到响应并转化成字符串
  HttpResponse response = client.execute(post);
  HttpEntity httpEntity = response.getEntity();
  String result = EntityUtils.toString(httpEntity,"utf-8");
  System.out.println(result);
}

JAVAを使ったhttp通信について詳しく解説HttpClient は Apache Jakarta Common のサブプロジェクトであり、提供するために使用されます。効率的 HTTP プロトコルをサポートする、機能が豊富な最新のクライアント プログラミング ツールキット。HTTP プロトコルの最新バージョンと推奨事項をサポートします。 HttpClient は多くのプロジェクトで使用されています。たとえば、Apache Jakarta 上の他の 2 つの有名なオープン ソース プロジェクト、Cactus および HTMLUnit はどちらも HttpClient を使用しています。

JAVA を使用した http 通信の実装に関する詳細な記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。