httpclient发送Get请求和Post请求

╰半橙微兮° 2023-09-25 12:41 251阅读 0赞

创建HttpClient发送请求、接收响应

    • Get请求简介
      • get无参数
      • get有参数
    • Post请求简介
      • post携带JSON参数
      • post携带表单参数
    • postman自动生成OKhttp代码

Get请求简介

  • 1). 创建HttpClient对象,可以使用HttpClients.createDefault()
  • 2). 如果是无参数的GET请求,则直接使用构造方法HttpGet(String url)创建HttpGet对象即可;
  • 3)如果是带参数GET请求,则可以先使用URIBuilder(String url)创建对象,再调用addParameter(Stringparam, String value)`, 或setParameter(String param, String)
    value)来设置请求参数,并调用build()方法构建一个URI对象。
  • 4). 创建HttpResponse,调用HttpClient对象的execute(HttpUriRequest
    request)发送请求,该方法返回一个HttpResponse。调用HttpResponse的getAllHeaders()、getHeaders(String
    name)等方法可获取服务器的响应头;
  • 5)调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。通过调用getStatusLine().getStatusCode()可以获取响应状态码。
  • 6). 释放连接。

构建一个Maven项目,引入如下依赖

  1. <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
  2. <dependency>
  3. <groupId>org.apache.httpcomponents</groupId>
  4. <artifactId>httpclient</artifactId>
  5. <version>4.5.8</version>
  6. </dependency>

get无参数

如果是无参数的GET请求,则直接使用构造方法HttpGet(String url)创建HttpGet对象即可

  1. /**
  2. *普通的GET请求
  3. */
  4. public class DoGET {
  5. public static void main(String[] args) throws Exception {
  6. // 创建Httpclient对象
  7. CloseableHttpClient httpclient = HttpClients.createDefault();
  8. // 创建http GET请求
  9. HttpGet httpGet = new HttpGet("http://www.baidu.com");
  10. CloseableHttpResponse response = null;
  11. try {
  12. // 执行请求
  13. response = httpclient.execute(httpGet);
  14. // 判断返回状态是否为200
  15. if (response.getStatusLine().getStatusCode() == 200) {
  16. //请求体内容
  17. String content = EntityUtils.toString(response.getEntity(), "UTF-8");
  18. //内容写入文件
  19. FileUtils.writeStringToFile(new File("E:\\devtest\\baidu.html"), content, "UTF-8");
  20. System.out.println("内容长度:"+content.length());
  21. }
  22. } finally {
  23. if (response != null) {
  24. response.close();
  25. }
  26. //相当于关闭浏览器
  27. httpclient.close();
  28. }
  29. }
  30. }

get有参数

如果是带参数GET请求,则可以先使用URIBuilder(String url)创建对象,再调用addParameter(Stringparam, String value)

  1. public class HttpclientTest {
  2. @Test
  3. public void httpGet() throws IOException {
  4. // 1.创建httpclient
  5. CloseableHttpClient httpClient = HttpClients.createDefault();
  6. //2. 创建HttpGet,设置URL访问地址
  7. String urlTest = "https://XXXX/XXX/shopping/platformInfo?platformid=7";
  8. HttpGet httpGet = new HttpGet(urlTest);
  9. // 3. 请求执行,获取响应
  10. CloseableHttpResponse response = httpClient.execute(httpGet);
  11. //解析响应
  12. if (response.getStatusLine().getStatusCode() == 2000) {
  13. String content = EntityUtils.toString(response.getEntity(), "UTF-8");
  14. System.out.println(content.length());
  15. }
  16. // 4.获取响应实体
  17. HttpEntity entity = response.getEntity();
  18. System.out.println(EntityUtils.toString(entity, "utf-8"));
  19. response.close();
  20. httpClient.close();
  21. }

代码中使用的是公司接口,请求URL前缀就XXX表示了,get请求如图所示
运行结果:我们已经看到get接口成功返回一条数据
在这里插入图片描述

Post请求简介

  • 1). 创建HttpClient对象,可以使用HttpClients.createDefault();
  • 2). 如果是无参数的POST请求,则直接使用构造方法HttpPost(String url)创建HttpPost对象即可;
  • 3)如果是带参数POST请求,先构建HttpEntity对象并设置请求参数,然后调用setEntity(HttpEntityentity)创建HttpPost对象。
  • 4). 创建HttpResponse,调用HttpClient对象的execute(HttpUriRequest
    request)发送请求,该方法返回一个HttpResponse。调用HttpResponse的getAllHeaders()、getHeaders(String
    name)等方法可获取服务器的响应头;
  • 5)调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。通过调用getStatusLine().getStatusCode()可以获取响应状态码。
  • 6). 释放连接。

post携带JSON参数

如果是带JSON参数POST请求,先构建HttpEntity对象并设置请求参数,因为我们的参数是JSON格式的,需要将请求对象转换成string类型的,然后调用setEntity(HttpEntityentity)创建HttpPost对象
首先我们先创建一个请求实体类PostData,代码如图所示

  1. /**
  2. * @param
  3. * @author wcy
  4. * @create 2022/10/15
  5. * @return
  6. * @description
  7. **/
  8. public class PostData {
  9. private String categoryid;
  10. private int currentPage;
  11. private String end_time;
  12. private int pageSize;
  13. private int platformid;
  14. private String start_time;
  15. private int step_id;
  16. public String getCategoryid() {
  17. return categoryid;
  18. }
  19. public void setCategoryid(String categoryid) {
  20. this.categoryid = categoryid;
  21. }
  22. public int getCurrentPage() {
  23. return currentPage;
  24. }
  25. public void setCurrentPage(int currentPage) {
  26. this.currentPage = currentPage;
  27. }
  28. public String getEnd_time() {
  29. return end_time;
  30. }
  31. public void setEnd_time(String end_time) {
  32. this.end_time = end_time;
  33. }
  34. public int getPageSize() {
  35. return pageSize;
  36. }
  37. public void setPageSize(int pageSize) {
  38. this.pageSize = pageSize;
  39. }
  40. public int getPlatformid() {
  41. return platformid;
  42. }
  43. public void setPlatformid(int platformid) {
  44. this.platformid = platformid;
  45. }
  46. public String getStart_time() {
  47. return start_time;
  48. }
  49. public void setStart_time(String start_time) {
  50. this.start_time = start_time;
  51. }
  52. public int getStep_id() {
  53. return step_id;
  54. }
  55. public void setStep_id(int step_id) {
  56. this.step_id = step_id;
  57. }
  58. }
  59. @Test
  60. public void httpPost() throws IOException {
  61. // 1.创建httpclient对象
  62. CloseableHttpClient httpClient = HttpClients.createDefault();
  63. // 2.创建post对象,设置URL访问地址
  64. String url = "https://XxX/XxX/shopping/goodsRank";
  65. HttpPost httpPost = new HttpPost(url);
  66. CloseableHttpResponse response = null;
  67. try {
  68. PostData data = new PostData();
  69. data.setCategoryid("");
  70. data.setCurrentPage(1);
  71. data.setEnd_time("2022-11-02");
  72. data.setPageSize(20);
  73. data.setPlatformid(1);
  74. data.setStart_time("2022-11-02");
  75. data.setStep_id(464);
  76. String bodyEntity = JSON.toJSONString(data);
  77. HttpEntity entity = new StringEntity(bodyEntity, ContentType.APPLICATION_JSON);
  78. httpPost.setEntity(entity);
  79. //发送post请求
  80. response = httpClient.execute(httpPost);
  81. //解析响应
  82. if (response.getStatusLine().getStatusCode() == 200) {
  83. //获取响应数据
  84. entity = response.getEntity();
  85. System.out.println(EntityUtils.toString(entity, "utf-8"));
  86. }
  87. }catch (IOException e){
  88. e.printStackTrace();
  89. }
  90. }

运行结果:
在这里插入图片描述

post携带表单参数

post请求传递参数的形式是将参数放入表单请求体中,然后将表单对象放入请求体中传递。

  1. //1.获得一个httpclient对象
  2. CloseableHttpClient httpclient = HttpClients.createDefault();
  3. //2.生成一个post请求
  4. HttpPost httpPost = new HttpPost("http://www.baidu.com/");
  5. //3.请求参数添加到请求体中,表单提交
  6. List<NameValuePair> nvpList = new ArrayList<NameValuePair>();
  7. nvps.add(new BasicNameValuePair(key, val));
  8. UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nvps, charset);
  9. httpPost.setEntity(formEntity);
  10. //4.执行get请求并返回结果
  11. CloseableHttpResponse response = httpclient.execute(httpPost);
  12. try {
  13. //5.处理结果响应体
  14. HttpEntity entity = response.getEntity();
  15. } finally {
  16. response.close();
  17. }

postman自动生成OKhttp代码

首先在postman编写好post请求的URL,请求参数,请求方式,请求头
在这里插入图片描述
点击sends按钮右侧的code弹窗展示,如图所示
在这里插入图片描述
框里面的代码就是自动生成的,我们可以复制代码到idea中,需要在maven`装下OKhhtp的依赖
官网连接:https://mvnrepository.com/

  1. OkHttpClient client = new OkHttpClient().newBuilder()
  2. .build();
  3. MediaType mediaType = MediaType.parse("text/plain");
  4. RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  5. .addFormDataPart("categoryid","")
  6. .addFormDataPart("currentPage","1")
  7. .addFormDataPart("end_time ","2022-11-01")
  8. .addFormDataPart("pageSize","20")
  9. .addFormDataPart("platformid ","1")
  10. .addFormDataPart("start_time ","2022-11-01")
  11. .addFormDataPart("step_id ","464")
  12. .build();
  13. Request request = new Request.Builder()
  14. .url("https://XXX/XXX/shopping/goodsRank")
  15. .method("POST", body)
  16. .addHeader("Cookie", "laravel_session=eyJpdiI6IkRxcWx6M201UHRWMWFWeDY3b0RURmc9PSIsInZhbHVlIjoid0pSM241cmgvRUk5WndHTnc2azlzNFpHVDh6MCt5R1pSV21pQXRPRDB1eEpyMThNZVUrelRKYzJHSVUzNHp3T290RHppOVNvSFZ3Z2VCQ2g4SEFQUjBXSGpRL3VkcUJiRUFzRGc5b21BRnhOUUwzUkNENlhzUEJlVGtWZkhZNGoiLCJtYWMiOiIyYzM1NDhkYzQ0YmZiNjQ5OWIwZjg1NDA3NTYxZTcyM2IyODAxNWI1ZGU4NmEzOTE2YjRmOTBjYzQzMzUyNjY1In0%3D")
  17. .build();
  18. Response response = client.newCall(request).execute();
  19. System.out.println(response);
  20. }

OKhttp的语法跟httpclient差不多,都是http工具类

发表评论

表情:
评论列表 (有 0 条评论,251人围观)

还没有评论,来说两句吧...

相关阅读