httpcomponents-client 使用小结

最近在搞远程访问数据的事,加载远程页面 ,开始想用jsp include加载页面会很方便 但是发现jsp的不论动态还是静态include都不可以加载远程数据,只能访问本站内部网页,

这个方案就被放弃了,然后是用js加载,也折腾了一天总算加载进来了,但是发现查看源码里面没有加载的页面内容只是把页面的现象加载进来了,实际内容没有,这不是我想要的,我要google能抓到我的加载的内容,所以js方法也被pass掉,最后用java读取远程文件吧内容放到前台,这样就可以了,不过开始用的httpurl这回出现乱码,也放弃了,最后有一个同事告诉我用httpcomponents-client 很好用,试了试,开始也是问题很多,比如说 因为版本冲突导致action出错,这些解决来之后显示很好,解决来我的问题。分享一下我的代码供大家参考,大家共同学习:


 CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            HttpGet httpGet = new HttpGet("http://targethost/homepage");
            CloseableHttpResponse response1 = httpclient.execute(httpGet);

        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            HttpGet httpGet = new HttpGet("http://targethost/homepage");
            CloseableHttpResponse response1 = httpclient.execute(httpGet);
    
            try {
                System.out.println(response1.getStatusLine());//请求是否成功
                HttpEntity entity1 = response1.getEntity();//得到请求的尸体
                InputStream  is=  entity1.getContent();//得到请求的内容
                
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));   

                StringBuilder sb = new StringBuilder();   

            

                String line = null;   

                try {   

                    while ((line = reader.readLine()) != null) {   

                        sb.append(line + "/n");   

                    }   

                } catch (IOException e) {   

                    e.printStackTrace();   

                } finally {   

                    try {   

                        is.close();   

                    } catch (IOException e) {   

                        e.printStackTrace();   

                    }   

                }   

             
            } finally {
                response1.close();
            }
        }catch(Exception e){
        	e.printStackTrace();
        }
        
    

sb即使请求页面的内容,可以找一个参数接收,然后传给前台。一定不要出现版本冲突,不然真的不知道错在哪里了,我现在用的都是4.5的包。一定要检查一下自己的包是否有冲突,提醒大家。希望能帮到大家大家



使用httpcomponents上传文件的步骤如下: 1. 添加依赖 首先,需要添加Apache HttpComponents的依赖,可以在项目的pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> ``` 2. 创建HttpPost请求对象 使用HttpPost请求对象来上传文件,首先需要创建一个HttpPost请求对象,并设置请求的URL地址: ``` HttpPost httpPost = new HttpPost(uploadUrl); ``` 其中,uploadUrl是上传文件的URL地址。 3. 创建MultipartEntityBuilder对象 接下来,需要创建一个MultipartEntityBuilder对象,用于构建multipart/form-data格式的请求体,以便上传文件。可以在MultipartEntityBuilder对象中添加文件参数、文本参数等: ``` MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); builder.addBinaryBody("file", new File(filePath)); builder.addTextBody("param1", "value1"); ``` 其中,file是文件参数的名称,new File(filePath)是要上传的文件路径;param1是文本参数的名称,value1是文本参数的值。 4. 设置请求体 将MultipartEntityBuilder对象中构建好的multipart/form-data格式的请求体设置到HttpPost请求对象中: ``` httpPost.setEntity(builder.build()); ``` 5. 发送请求并获取响应 使用HttpClient对象发送HttpPost请求,并获取响应: ``` CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = httpClient.execute(httpPost); ``` 6. 处理响应 处理响应,获取上传结果: ``` if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 上传成功 String result = EntityUtils.toString(response.getEntity()); } else { // 上传失败 } ``` 完整的代码示例如下: ``` public static void uploadFile(String uploadUrl, String filePath) throws Exception { HttpPost httpPost = new HttpPost(uploadUrl); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); builder.addBinaryBody("file", new File(filePath)); builder.addTextBody("param1", "value1"); httpPost.setEntity(builder.build()); CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = httpClient.execute(httpPost); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 上传成功 String result = EntityUtils.toString(response.getEntity()); } else { // 上传失败 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值