`
大鹏展翅XS
  • 浏览: 2877 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

程序之中模拟表单发起GET,POST请求以及实现文件上传

阅读更多
一、在程序中经常会碰到要模拟表单发送请求的情况,此时可以使用JDK自带的UrlConnection,不过它不够灵活。一般HttpClient用的更普遍,HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,所以要熟练掌握HttpClient的用法。
二、HttpClient的使用分为以下几步:
首先导入相应的依赖,如果是maven管理的项目,直接在pom.xml文件中放入以下配置即可(如果有冲突,自己调整jar包版本):
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.2</version>
        </dependency>
       <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.5</version>
        </dependency>

<!--没有该依赖包时会报错-->
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
如果不是maven管理的项目,自己到https://mvnrepository.com/下载好所需的jar包(或者下载附件中的jar包)然后放入自己的项目中即可
使用步骤:
A.创建HttpClient对象
B.创建请求方法的实例,并指定请求URL
C.如果请求的接口需要有请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数;对于HttpGet请求也可以直接将请求参数拼接在url的后面
D.调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse
E.通过HttpResponse的getEntity()方法可获取HttpEntity对象,该对象中包含有服务器的响应内容,随后通过对该对象的处理获取需要的信息
F.不论请求成功与否都要关闭连接
三、示例代码(导入jar包,换成可用的url可以直接使用):
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
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;


public class TestHttpClient {
public static void main(String[] args) throws Exception{
get();
// post();
// upload();
}
// 发送GET请求
public static void get() throws Exception {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet get = new HttpGet("http://localhost:8080/test/getUserInfo?uid=6007");    //此处是将请求参数拼接在url的后面
CloseableHttpResponse response = null;
try {
response = httpClient.execute(get);
HttpEntity entity = response.getEntity();
if(entity!=null){
System.out.println("***out****"+EntityUtils.toString(entity));
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(response!=null){
response.close();
}
if(httpClient!=null){
response.close();
}
}

}

// 发送POST请求
public static void post() throws Exception{
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost("http://localhost:8080/test/admin/getUserInfo");
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("uid","6007"));       //设置表单参数,第一个为参数的名字,第二个为参数的内容,只能为字符串
params.add(new BasicNameValuePair("name","SMITH"));
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params);
post.setEntity(formEntity);
CloseableHttpResponse response = null;
try {
response = httpClient.execute(post);
HttpEntity entity = response.getEntity();
if(entity!=null){
System.out.println("***out****"+EntityUtils.toString(entity));
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(response!=null){
response.close();
}
if(httpClient!=null){
httpClient.close();
}
}
}


// 上传文件
public static void upload() throws Exception{
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost("http://localhost:8080/test/app/uploadImage");
FileBody fileBody = new FileBody(new File("E:"+File.separator+"2"+File.separator+"2.jpg"));
StringBody uid = new StringBody("6007", ContentType.TEXT_PLAIN);
HttpEntity reqEntity = MultipartEntityBuilder.create().addPart("img",fileBody).addPart("uid", uid).build();
//此处掉的img和uid分别为这两个参数的名称,要与请求接口中的参数的名字一样
post.setEntity(reqEntity);
CloseableHttpResponse response = null;
try {
response = httpClient.execute(post);
HttpEntity entity = response.getEntity();
if(entity!=null){
System.out.println("***out****"+EntityUtils.toString(entity));
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(response!=null){
response.close();
}
if(httpClient!=null){
response.close();
}
}
}
}

分享到:
评论

相关推荐

    模拟GET/POST方法发送HTTP请求

    POST请求的报文需要包含请求行、请求头和请求体: ``` POST /path HTTP/1.1 Host: www.example.com Content-Type: application/x-www-form-urlencoded Content-Length: length data ``` 其中`data`是POST的数据...

    postman http post get工具.rar

    在API接口测试中,Postman允许用户输入参数、JSON数据、文件等内容,模拟POST请求,查看服务器响应。 3. **GET请求**:GET请求是从服务器获取数据的默认方式,请求参数显示在URL中。Postman支持构建GET请求,通过...

    robot模拟人文件自动下载和上传

    本主题聚焦于使用"robot模拟人"在Windows环境下实现文件的自动化下载与上传,这涉及到一系列的技术点,包括但不限于Windows API调用、事件模拟、网络请求以及文件操作。 首先,"robot模拟人"通常指的是自动化测试...

    post提交测试工具

    POST提交测试工具的核心功能在于模拟用户或应用程序对服务器发起POST请求,帮助开发者检查服务器端的处理逻辑是否正确,数据接收是否完整,以及响应是否符合预期。这类工具通常提供以下特性: 1. **自定义请求头**...

    JavaScript 跨域之POST实现方法

    为了实现POST请求的跨域通信,本文提出了一个通过iframe和form表单提交,并使用postMessage API进行通信的方法。这种方法可以实现跨域POST请求,并且能够将请求结果返回给调用者。 首先,需要实现一个能够接受JSONP...

    Zttp针对大多数常见用例进行优化的基于开发人员体验的HTTP客户端

    对于POST请求,Zttp支持JSON、表单数据、文件上传等多种数据格式。开发者可以轻松设置请求头,传递查询参数,甚至自定义HTTP body,使得数据发送灵活且高效。 4. **响应处理** Zttp返回的响应对象包含了丰富的...

    requests-0.13.8.tar.gz

    3. **简单易用的API**:`requests` 库的设计原则是简洁易用,它的API设计得很直观,例如 `requests.get()` 用于发起GET请求,`requests.post()` 用于发起POST请求,这使得新手也能快速上手。 4. **请求头管理**:库...

    HttpTest示例

    在"HttpTest示例"中,客户端可能构建一个POST请求,将特定的数据如JSON或XML格式的信息发送到服务器。 服务器端的处理可能涉及各种技术,例如使用Java的Servlet、Node.js的Express框架或者Python的Flask框架来接收...

    HTTP协议解析

    - **POST**:用于将数据发送到服务器,通常用于提交表单或上传文件。 - **PUT**:请求服务器存储一个资源,并用Request-URI作为其标识。 - **DELETE**:请求服务器删除Request-URI所标识的资源。 - **TRACE**:请求...

    web服务器客户端实例

    3. **GET和POST请求**:GET用于获取资源,其参数显示在URL中;POST用于向服务器提交数据,常用于表单提交,参数隐藏在请求体中。 4. **Web服务器配置**:涉及到端口设置、域名绑定、虚拟主机、日志记录、安全设置等...

    易语言POST登录易语言论坛源码-易语言

    在本文中,我们将深入探讨“易语言POST登录易语言论坛源码”这一主题,以及与之相关的网络相关源码。 POST是HTTP协议中的一个方法,用于向服务器发送数据,通常用于提交表单或进行数据交互。在易语言中实现POST登录...

    httpunit-1.7相关所有jar文件

    1. **发起HTTP请求**:HTTPUnit能够模拟GET、POST以及其他HTTP方法,允许测试者向服务器发送各种类型的请求。 2. **处理响应**:接收到服务器响应后,HTTPUnit能解析HTML、XML、JSON等各种格式的内容,便于验证返回...

    ajax学习代码

    2. **初始化连接**:使用XMLHttpRequest对象的open()方法,指定请求类型(GET或POST)、请求的URL以及是否异步执行。 3. **设置请求头**:如果需要发送POST请求,还需设置Content-Type请求头,如"application/x-...

    Python实现的爬虫刷回复功能示例

    在这个示例中,通过分析得出需要logname、logpass和action三个字段,并通过urllib.urlencode方法将登录信息编码后发送POST请求来实现登录。 3. 刷帖子和回复 在爬虫中实现自动刷帖或回复功能,首先需要找到目标网站...

    Mission-to-Mars:使用Flask应用程序,chromedriver,碎片和beautifulsoup进行Webscrapping

    在Web抓取过程中,我们通常会使用它来向目标网站发起GET或POST请求,获取HTML页面内容。Requests库易于使用且功能强大,可以轻松处理cookies、文件上传、甚至自动重定向,为Web抓取提供了便利。 BeautifulSoup则是...

    2021-2022计算机二级等级考试试题及答案No.1033.docx

    这种方式可以将请求中的参数值嵌入到JSP页面中,实现在页面上显示参数值的目的。 ### 数据库的完整性 数据库的完整性机制是为了确保数据库中的数据保持一致性和准确性。它通过实施各种约束和规则来防止非法数据的...

    selenium跳过webdriver检测并模拟登录淘宝

    在过去,人们尝试使用GET/POST请求的方式来爬取数据,但是这种方式在大型网站面前显得力不从心,尤其是当网站引入了滑动验证码等机制之后。因此,利用Selenium来实现更智能的模拟登录就显得尤为重要。 #### 二、...

Global site tag (gtag.js) - Google Analytics