Advertisement

HTTP协议、HTTPCline介绍

阅读量:

HTTP和大数据

正常访问网站时, window系统会通过host文件查找对应域名的服务器IP地址.无需再次从DNS服务器解析出对应的IP地址;

HTTP协议:超文本传输协议。终端和服务器通信

物理层:网线、网卡

网络层:IP协议

传输层:建立连接-----TCP(安全、可靠)/UDP

应用层:DNS FTP SMTP

复制代码
 import java.io.IOException;

    
 import java.io.InputStream;
    
 import java.net.InetSocketAddress;
    
 import java.net.ServerSocket;
    
 import java.net.Socket;
    
  
    
 public class Http通信 {
    
     public static void main(String[] args) throws IOException {
    
     ServerSocket server = new ServerSocket();
    
     server.bind(new InetSocketAddress(8888));
    
     System.out.println("开始监听啦,我就在这监听,有动静我就告诉你哦");
    
  
    
     Socket accept = server.accept();
    
     System.out.println("收到了某些信息,我读出来了,你看一下哦,哈哈");
    
     InputStream inputStream = accept.getInputStream();
    
     byte[] buffer = new byte[2048];
    
     int len = inputStream.read(buffer);
    
     System.out.println(new String(buffer,0,len));
    
     }
    
 }
复制代码
 开始监听啦

    
 收到了某些信息。哈哈
    
 GET / HTTP/1.1 --------------------请求行
    
 Host: localhost:8888        --------------请求头
    
 Connection: keep-alive     ---
    
 Cache-Control: max-age=0---
    
 Upgrade-Insecure-Requests: 1---
    
 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36 Edg/83.0.478.37
    
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    
 Sec-Fetch-Site: cross-site
    
 Sec-Fetch-Mode: navigate
    
 Sec-Fetch-User: ?1
    
 Sec-Fetch-Dest: document
    
 Accept-Encoding: gzip, deflate, br
    
 Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6--------请求头结束
    
   17. name=XX  ------空一行 请求体

HttpClient

大部分项目接口是Http请求,数据格式是JSON格式。HttpClient 主要功能

(1)支持所有 HTTP 方法(包括 GET、POST、PUT 和 DELETE 等)
(2)能够实现自动重定向
(3)能够使用 https 协议
(4)能够处理代理服务器等效功能

复制代码
    **HttpPost****HttpDelete****HttpPut****HttpGet**

基础依赖-HTTPCline和fastjson

复制代码

1、HTTPClient-Get请求

复制代码
 package com.leo.controller;

    
  
    
 import org.apache.http.HttpEntity;
    
 import org.apache.http.client.methods.CloseableHttpResponse;
    
 import org.apache.http.client.methods.HttpGet;
    
 import org.apache.http.impl.client.CloseableHttpClient;
    
 import org.apache.http.impl.client.HttpClients;
    
 import org.apache.http.util.EntityUtils;
    
  
    
 import java.io.IOException;
    
  
    
 public class HttpGetTest {
    
     public static void main(String[] args) throws IOException {
    
     //1.打开浏览器
    
     CloseableHttpClient httpClient = HttpClients.createDefault();
    
     //2.声明get请求
    
     HttpGet httpGet = new HttpGet("http://www.baidu.com/s?wd=java");
    
     //3.发送请求
    
     CloseableHttpResponse response = httpClient.execute(httpGet);
    
     //4.判断状态码
    
     if(response.getStatusLine().getStatusCode()==200){
    
         HttpEntity entity = response.getEntity();
    
         //使用工具类EntityUtils,从响应中取出实体表示的内容并转换成字符串
    
         String string = EntityUtils.toString(entity, "utf-8");
    
         System.out.println(string);
    
     }
    
     //5.关闭资源
    
     response.close();
    
     httpClient.close();
    
     }
    
 }

2,HTTPCline---Post请求

复制代码
 package com.leo.controller;

    
  
    
 import org.apache.http.HttpEntity;
    
 import org.apache.http.NameValuePair;
    
 import org.apache.http.client.entity.UrlEncodedFormEntity;
    
 import org.apache.http.client.methods.CloseableHttpResponse;
    
 import org.apache.http.client.methods.HttpPost;
    
 import org.apache.http.impl.client.CloseableHttpClient;
    
 import org.apache.http.impl.client.HttpClients;
    
 import org.apache.http.message.BasicNameValuePair;
    
 import org.apache.http.util.EntityUtils;
    
  
    
 import java.io.IOException;
    
 import java.util.ArrayList;
    
 import java.util.List;
    
  
    
 public class HttpPostTest {
    
     public static void main(String[] args) throws IOException {
    
     //1.打开浏览器
    
     CloseableHttpClient httpClient = HttpClients.createDefault();
    
     //2.声明get请求
    
     HttpPost httpPost = new HttpPost("https://www.oschina.net/");
    
     //3.开源中国为了安全,防止恶意攻击,在post请求中都限制了浏览器才能访问
    
     httpPost.addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36");
    
     //4.判断状态码
    
     List<NameValuePair> parameters = new ArrayList<NameValuePair>(0);
    
     parameters.add(new BasicNameValuePair("scope", "project"));
    
     parameters.add(new BasicNameValuePair("q", "java"));
    
  
    
     UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters,"UTF-8");
    
  
    
     httpPost.setEntity(formEntity);
    
  
    
     //5.发送请求
    
     CloseableHttpResponse response = httpClient.execute(httpPost);
    
  
    
     if(response.getStatusLine().getStatusCode()==200){
    
         HttpEntity entity = response.getEntity();
    
         String string = EntityUtils.toString(entity, "utf-8");
    
         System.out.println(string);
    
     }
    
     //6.关闭资源
    
     response.close();
    
     httpClient.close();
    
     }
    
 }

全部评论 (0)

还没有任何评论哟~