Java模拟HTTP的Get和Post请求(增强) Apache-httpclient

springboot使用HttpClient调用聚合数据第三方接口(get方法) 首先,引入依赖: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.12</version> </dependency> 然后,编写一个HttpClientUti 阅读详情

http://hc.apache.org/downloads.cgi


 
下面是代码:
import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.HttpMethod; 
import org.apache.commons.httpclient.HttpStatus; 
import org.apache.commons.httpclient.URIException; 
import org.apache.commons.httpclient.methods.GetMethod; 
import org.apache.commons.httpclient.methods.PostMethod; 
import org.apache.commons.httpclient.params.HttpMethodParams; 
import org.apache.commons.httpclient.util.URIUtil; 
import org.apache.commons.lang.StringUtils; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Map; 

/** 
* HTTP工具箱 
* 
* @author leizhimin 2009-6-19 16:36:18 
*/
 
public  final  class HttpTookit { 
         private  static Log log = LogFactory.getLog(HttpTookit. class); 

         /** 
         * 执行一个HTTP GET请求,返回请求响应的HTML 
         * 
         * @param url                 请求的URL地址 
         * @param queryString 请求的查询参数,可以为null 
         * @param charset         字符集 
         * @param pretty            是否美化 
         * @return 返回请求响应的HTML 
         */
 
         public  static String doGet(String url, String queryString, String charset,  boolean pretty) { 
                StringBuffer response =  new StringBuffer(); 
                HttpClient client =  new HttpClient(); 
                HttpMethod method =  new GetMethod(url); 
                 try { 
                         if (StringUtils.isNotBlank(queryString)) 
                                 //对get请求参数做了http请求默认编码,好像没有任何问题,汉字编码后,就成为%式样的字符串 
                                method.setQueryString(URIUtil.encodeQuery(queryString)); 
                        client.executeMethod(method); 
                         if (method.getStatusCode() == HttpStatus.SC_OK) { 
                                BufferedReader reader =  new BufferedReader( new InputStreamReader(method.getResponseBodyAsStream(), charset)); 
                                String line; 
                                 while ((line = reader.readLine()) !=  null) { 
                                         if (pretty) 
                                                response.append(line).append(System.getProperty( "line.separator"));
                                         else 
                                                response.append(line); 
                                } 
                                reader.close(); 
                        } 
                }  catch (URIException e) { 
                        log.error( "执行HTTP Get请求时,编码查询字符串“" + queryString +  "”发生异常!", e); 
                }  catch (IOException e) { 
                        log.error( "执行HTTP Get请求" + url +  "时,发生异常!", e); 
                }  finally { 
                        method.releaseConnection(); 
                } 
                 return response.toString(); 
        } 

         /** 
         * 执行一个HTTP POST请求,返回请求响应的HTML 
         * 
         * @param url         请求的URL地址 
         * @param params    请求的查询参数,可以为null 
         * @param charset 字符集 
         * @param pretty    是否美化 
         * @return 返回请求响应的HTML 
         */
 
         public  static String doPost(String url, Map<String, String> params, String charset,  boolean pretty) { 
                StringBuffer response =  new StringBuffer(); 
                HttpClient client =  new HttpClient(); 
                HttpMethod method =  new PostMethod(url); 
                 //设置Http Post数据 
                 if (params !=  null) { 
                        HttpMethodParams p =  new HttpMethodParams(); 
                         for (Map.Entry<String, String> entry : params.entrySet()) { 
                                p.setParameter(entry.getKey(), entry.getValue()); 
                        } 
                        method.setParams(p); 
                } 
                 try { 
                        client.executeMethod(method); 
                         if (method.getStatusCode() == HttpStatus.SC_OK) { 
                                BufferedReader reader =  new BufferedReader( new InputStreamReader(method.getResponseBodyAsStream(), charset)); 
                                String line; 
                                 while ((line = reader.readLine()) !=  null) { 
                                         if (pretty) 
                                                response.append(line).append(System.getProperty( "line.separator"));
                                         else 
                                                response.append(line); 
                                } 
                                reader.close(); 
                        } 
                }  catch (IOException e) { 
                        log.error( "执行HTTP Post请求" + url +  "时,发生异常!", e); 
                }  finally { 
                        method.releaseConnection(); 
                } 
                 return response.toString(); 
        } 

         public  static  void main(String[] args) { 
                String y = doGet( "http://video.sina.com.cn/life/tips.html", null, "GBK", true); 
                System.out.println(y); 
        } 
}
 
其实,这里的美化加入系统平台无关的换行符,可以任何平台上正确显示换行。
 
另外发现,通过JDK自带类库实现的请求,往往在请求一些url时,无法获取到请求结果。但此工具总能保证只要你的浏览器能打开,它总能忠实的将响应的内容反馈回来。
 
另外,将查看Java平台环境的代码给出来,很常用!
         public  static  void main(String[] args) { 
                Properties p = System.getProperties(); 
                 for (Map.Entry<Object, Object> entry : p.entrySet()) { 
                        System.out.println(entry.getKey() +  " = " + entry.getValue()); 
                } 
        }
 
java.runtime.name = Java(TM) SE Runtime Environment 
sun.boot.library.path = Q:\jdk6\jre\bin 
java.vm.version = 14.0-b16 
java.vm.vendor = Sun Microsystems Inc. 
java.vendor.url = http: //java.sun.com/ 
path.separator = ; 
idea.launcher.port = 7540 
java.vm.name = Java HotSpot(TM) Client VM 
file.encoding.pkg = sun.io 
sun.java.launcher = SUN_STANDARD 
user.country = CN 
sun.os.patch.level = Service Pack 3 
java.vm.specification.name = Java Virtual Machine Specification 
user.dir = E:\NVMS\Code\sinamovie 
java.runtime.version = 1.6.0_14-b08 
java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment 
java.endorsed.dirs = Q:\jdk6\jre\lib\endorsed 
os.arch = x86 
java.io.tmpdir = C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ 
line.separator =    

java.vm.specification.vendor = Sun Microsystems Inc. 
user.variant =    
os.name = Windows XP 
sun.jnu.encoding = GBK 
java.library.path = Q:\jdk6\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;Q:\JavaFX\javafx-sdk1.2\bin;Q:\JavaFX\javafx-sdk1.2\emulator\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\StormII\Codec;C:\Program Files\StormII 
java.specification.name = Java Platform API Specification 
java. class.version = 50.0 
sun.management.compiler = HotSpot Client Compiler 
os.version = 5.1 
user.home = d:\我的文档 
user.timezone = Asia/Shanghai 
java.awt.printerjob = sun.awt.windows.WPrinterJob 
idea.launcher.bin.path = C:\IDEA8\bin 
file.encoding = UTF-8 
java.specification.version = 1.6 
java. class.path = Q:\jdk6\jre\lib\alt-rt.jar;Q:\jdk6\jre\lib\charsets.jar;Q:\jdk6\jre\lib\deploy.jar;Q:\jdk6\jre\lib\javaws.jar;Q:\jdk6\jre\lib\jce.jar;Q:\jdk6\jre\lib\jsse.jar;Q:\jdk6\jre\lib\management-agent.jar;Q:\jdk6\jre\lib\plugin.jar;Q:\jdk6\jre\lib\resources.jar;Q:\jdk6\jre\lib\rt.jar;Q:\jdk6\jre\lib\ext\dnsns.jar;Q:\jdk6\jre\lib\ext\localedata.jar;Q:\jdk6\jre\lib\ext\sunjce_provider.jar;Q:\jdk6\jre\lib\ext\sunmscapi.jar;Q:\jdk6\jre\lib\ext\sunpkcs11.jar;E:\NVMS\Code\sinamovie\out\production\sinamovie;E:\NVMS\Code\sinamovie\lib\jlm\ezmorph-1.0.4.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-fileupload.jar;E:\NVMS\Code\sinamovie\lib\jotm\jotm-jms.jar;E:\NVMS\Code\sinamovie\lib\jotm\jotm-datasource.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-codec.jar;E:\NVMS\Code\sinamovie\lib\spring-jdbc.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-dbcp.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-httpclient.jar;E:\NVMS\Code\sinamovie\lib\junit\junit-3.8.2.jar;E:\NVMS\Code\sinamovie\lib\log4j\log4j-1.2.15.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-beanutils.jar;E:\NVMS\Code\sinamovie\lib\aspectjrt.jar;E:\NVMS\Code\sinamovie\lib\spring-orm.jar;E:\NVMS\Code\sinamovie\lib\jotm\jotm-client.jar;E:\NVMS\Code\sinamovie\lib\simple-xml\stax-1.2.0.jar;E:\NVMS\Code\sinamovie\lib\jotm\jotm-core.jar;E:\NVMS\Code\sinamovie\lib\spring-beans.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-digester.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-logging.jar;E:\NVMS\Code\sinamovie\lib\aspectjweaver.jar;E:\NVMS\Code\sinamovie\lib\jotm\xapool.jar;E:\NVMS\Code\sinamovie\lib\spring-aop.jar;E:\NVMS\Code\sinamovie\lib\jlm\json.jar;E:\NVMS\Code\sinamovie\lib\jlm\proxool-cglib.jar;E:\NVMS\Code\sinamovie\lib\jlm\proxool-0.9.1.jar;E:\NVMS\Code\sinamovie\lib\mysql-connector-java-5.1.6-bin.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-io.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-validator.jar;E:\NVMS\Code\sinamovie\lib\asm-util-2.2.3.jar;E:\NVMS\Code\sinamovie\lib\spring-core.jar;E:\NVMS\Code\sinamovie\lib\jlm\oscache-2.4.1.jar;E:\NVMS\Code\sinamovie\lib\spring-context.jar;E:\NVMS\Code\sinamovie\lib\ibatis\ibatis-2.3.4.726.jar;E:\NVMS\Code\sinamovie\lib\aopalliance.jar;E:\NVMS\Code\sinamovie\lib\dom4j\dom4j-1.6.1.jar;E:\NVMS\Code\sinamovie\lib\jlm\htmlparser.jar;E:\NVMS\Code\sinamovie\lib\jlm\json-lib-2.2.1-jdk15.jar;E:\NVMS\Code\sinamovie\lib\spring-jms.jar;E:\NVMS\Code\sinamovie\lib\jlm\flexjson.jar;E:\NVMS\Code\sinamovie\lib\cglib-nodep-2.1_3.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-collections.jar;E:\NVMS\Code\sinamovie\lib\jotm\jotm-standalone.jar;E:\NVMS\Code\sinamovie\lib\jlm\jeval.jar;E:\NVMS\Code\sinamovie\lib\asm-commons-2.2.3.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-attributes-compiler.jar;E:\NVMS\Code\sinamovie\lib\spring-tx.jar;E:\NVMS\Code\sinamovie\lib\junit\junit-4.4.jar;E:\NVMS\Code\sinamovie\lib\jotm\ow2-jta-1.1-spec.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-attributes-api.jar;E:\NVMS\Code\sinamovie\lib\spring-context-support.jar;E:\NVMS\Code\sinamovie\lib\simple-xml\stax-api-1.0.1.jar;E:\NVMS\Code\sinamovie\lib\dom4j\jaxen-1.1-beta-7.jar;E:\NVMS\Code\sinamovie\lib\simple-xml\simple-xml-2.0.2.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-lang.jar;E:\NVMS\Code\sinamovie\lib\asm-2.2.3.jar;E:\NVMS\Code\sinamovie\lib\spring-test.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-discovery.jar;E:\NVMS\Code\sinamovie\lib\jlm\htmllexer.jar;E:\NVMS\Code\sinamovie\lib\jakarta-commons\commons-pool.jar;C:\IDEA8\lib\idea_rt.jar 
user.name = Administrator 
java.vm.specification.version = 1.0 
java.home = Q:\jdk6\jre 
sun.arch.data.model = 32 
user.language = zh 
java.specification.vendor = Sun Microsystems Inc. 
awt.toolkit = sun.awt.windows.WToolkit 
java.vm.info = mixed mode, sharing 
java.version = 1.6.0_14 
java.ext.dirs = Q:\jdk6\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext 
sun.boot. class.path = Q:\jdk6\jre\lib\resources.jar;Q:\jdk6\jre\lib\rt.jar;Q:\jdk6\jre\lib\sunrsasign.jar;Q:\jdk6\jre\lib\jsse.jar;Q:\jdk6\jre\lib\jce.jar;Q:\jdk6\jre\lib\charsets.jar;Q:\jdk6\jre\classes 
java.vendor = Sun Microsystems Inc. 
file.separator = \ 
java.vendor.url.bug = http: //java.sun.com/cgi-bin/bugreport.cgi 
sun.io.unicode.encoding = UnicodeLittle 
sun.cpu.endian = little 
sun.desktop = windows 
sun.cpu.isalist =    


另外,我再给出一个朋友写的机器人程序,恶搞飞信诈骗网站的例子。欢迎多多运行,搞死这些骗子:
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.ProtocolException; 
import java.net.URL; 

import com.verisign.uuid.UUID; 

/** 
* 向一个飞信诈骗网站自动提交垃圾信息的程序,用空可以运行一下。 
* @author wangpeng 
* 
*/
 
public  class AutoSubmit { 

   /** 
    * @param args 
    * @throws Exception    
    */
 
   public  static  void main(String[] args)  throws Exception { 
     for( int i=0; i < 100000; i++){ 
      post(i); 
    } 
  } 
    
   private  static  void post( int i)  throws Exception{ 
    String s = UUID.generate().toString(); 
    String s1 = s.substring(0,2); 
    s = s1+ s.substring(s.length() - 3, s.length()); 
     
    URL url =  new URL( "http://yfs88.sv10.sgedns.cn/yy/e/qq22.asp");// 提交地址 
    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
    httpURLConnection.setDoOutput(true);// 打开写入属性 
    httpURLConnection.setDoInput(true);// 打开读取属性 
    httpURLConnection.setRequestMethod("POST");// 设置提交方法 
    httpURLConnection.setConnectTimeout(50000);// 连接超时时间 
    httpURLConnection.setReadTimeout(50000); 
    httpURLConnection.connect(); 
     
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(httpURLConnection.getOutputStream(), "GBK")); 
    out.write("name=" + s + i +  //用户名不能重复 
        "&password=748" + 
        "&sex=日你很行" + 
        "&oicq=748748" + 
        "&icq=748748" + 
        "&msn=caonima" + 
        "&shengri=再不关门滚蛋,就把你们全关起来" + 
        "&home=已经盯上你们了");//要post的数据,多个以&符号分割 
    out.flush(); 
    out.close(); 

     

    //读取post之后的返回值 
//    BufferedReader in = new BufferedReader(new InputStreamReader((InputStream) httpURLConnection.getInputStream())); 
//    String line = null; 
//    StringBuilder sb = new StringBuilder(); 
//    while ((line = in.readLine()) != null) { 
//      sb.append(line); 
//    } 
//    in.close(); 
//    System.out.println("client:" + sb.toString()); 
     
    httpURLConnection.disconnect();//断开连接 

    // 
    System.out.println("client post ok:" + i); 
  } 

}
 
上面程序师通过JDK的原生API实现的,很不错的一个程序。
从上面也可以看出,注册表单的验证码是多么重要了,呵呵!


同步请求优酷视频信息


package org.apache.http.client.fluent;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.Charset;

import net.sf.json.*;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpResponseException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.ContentType;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

/**
 * This example demonstrates how the HttpClient fluent API can be used to handle HTTP responses
 * without buffering content body in memory.
 */

public class FluentResponseHandling {
	
	public static boolean isend = false;

    public static void main(String[] args)throws Exception {
    	String url = "电影";
    	url = URLEncoder.encode(url, "utf-8");
    	url = "https://openapi.youku.com/v2/videos/by_category.json?client_id=5585ba4285cb3c9e&category="+url;
    	//url = "https://openapi.youku.com/v2/videos/by_category.json?client_id=5585ba4285cb3c9e";
    	
    	//url = "http://test0919.duapp.com/";
    	
    	for(int i = 0; i< 10000; i++) {
    		
    		if(isend == true) {
    			break;
    		}
    		
    		FluentResponseHandling.accessYouku(url + "&page=" + i);
    	}
    	

    }
    
    public static void accessYouku(String url)  throws Exception{
 
    	
        Document result = Request.Get(url)
        .execute().handleResponse(new ResponseHandler<Document>() {

	    public Document handleResponse(final HttpResponse response) throws IOException {
	        StatusLine statusLine = response.getStatusLine();
	        HttpEntity entity = response.getEntity();
	        if (statusLine.getStatusCode() >= 300) {
	            throw new HttpResponseException(
	                    statusLine.getStatusCode(),
	                    statusLine.getReasonPhrase());
	        }
	        if (entity == null) {
	            throw new ClientProtocolException("Response contains no content");
	        }
	//        DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
	//        try {
	//            DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
	//            ContentType contentType = ContentType.getOrDefault(entity);
	//            if (!contentType.equals(ContentType.APPLICATION_XML)) {
	//                throw new ClientProtocolException("Unexpected content type:" + contentType);
	//            }
	//            Charset charset = contentType.getCharset();
	//            if (charset == null) {
	//                charset = Consts.ISO_8859_1;
	//            }
	//            return docBuilder.parse(entity.getContent(), charset.name());
	//        } catch (ParserConfigurationException ex) {
	//            throw new IllegalStateException(ex);
	//        } catch (SAXException ex) {
	//            throw new ClientProtocolException("Malformed XML document", ex);
	//        }
	        ContentType contentType = ContentType.getOrDefault(entity);
	        String charset = contentType.getCharset().name();
	        System.out.println("charset:" + charset);
	        String  s = FluentResponseHandling.inputStream2String(entity.getContent(),charset); 
	        System.out.println(s);
	        
	        //parse json
	        JSONObject jsonObj = JSONObject.fromObject(s);
	        JSONArray array = jsonObj.getJSONArray("videos");
	        for(int i = 0 ; i< array.size();i++)
	        {
	        	JSONObject dic = array.getJSONObject(i);
	        	System.out.println(dic.get("title"));
	        	
	        }
	        if(array.size() == 0) {
	        	isend = true;
	        }
	        
	        return null;
	    }
	
	    });
	// Do something useful with the result
	//System.out.println(result);
	    }
    
    public static String inputStream2String(InputStream   is, String encode)   throws   IOException{ 
        ByteArrayOutputStream   baos   =   new   ByteArrayOutputStream(); 
        int   i=-1; 
        while((i=is.read())!=-1){ 
        baos.write(i); 
        }      
        byte[] lens = baos.toByteArray();
        String result = new String(lens,encode);
        is.close();
        return result;
}

}




HttpClient、RestTemplate和Feign相关知识 #先了解一下HTTP 协议 史前时期 HTTP 协议在我们的生活中随处可见,打开手机或者电脑,只要你上网,不论是用 iPhone、Android、Windows 还是 Mac,不论是用浏览器还是 App,不论是看新闻、短视频还是听音乐、玩游戏,后面总会有 HTTP 在默默为你服务。 据 NetCraft 公司统计,目前全球至少有 16 亿个网站、2 亿多个独立域名,而这个庞大网络世界的底层运转机制就是 HTTP。 那么,在享受如此便捷舒适的网络生活时,你有没有想过,HTTP 协议是怎么来的?它最开始是什么样 阅读详情

相关推荐

Delphi 12.3 HttpServer与Post实战:构建企业级HTTP服务与RESTful API

HTTP服务器是现代软件架构中的基础组件,它基于客户端-服务器模型,通过HTTP协议实现数据通信。其核心原理是监听特定端口,解析请求报文并返回响应,支持GET、POST等多种方法。在技术价值上,HTTP服务器使得应用能够提供Web服务接口,实现前后端分离与系统集成。常见的应用场景包括构建RESTful API、提供数据接口服务、实现微服务通信等。本文聚焦于Delphi 12.3平台,深入探讨如何利用其内置的TIdHTTPServer组件高效处理POST请求,并构建健壮的企业级服务。通过解析JSON数据、处理

weixin_29973493的博客 263

HttpClient可以直接请求https,为何要绕过ssl证书验证?

本程序使用的HttpClient版本:httpclient4.5.2 一个有意思的现象,看下面这段获取百度首页代码的HttpClient请求: importjava.io.IOException; importorg.apache.http.HttpEntity; importorg.apache.http.client.methods.CloseableHttpResponse; importorg.apache.http.client.methods.HttpGet; im...

YHJ 6186

Flowable任务节点动态预测:基于任务ID与参数获取下一节点及候选分配策略

本文深入探讨了Flowable工作流引擎中任务节点动态预测功能的实现。通过解析任务ID与运行时参数,模拟流程执行路径,精准预测下一节点及候选用户/组集合,从而提升用户体验与系统透明度。核心在于利用自定义命令实现表达式求值,并深度解析候选者分配策略,确保预测结果与实际流程执行一致。

nnn11的博客 736

GET方式获取服务器数据---利用apache的jar包

HttpClient-----HttpGet

Rose 484

张量/数组存储方式与向量化展开/展平、view、reshape、permute对比

对于一个Tensor来说,我们可以认为它有两种存储方式。

欢迎关注,共同进步! 3434

数字图像处理第九章笔记

目录一、腐蚀与膨胀1、腐蚀2、膨胀3、对偶性4、开操作与闭操作二、一些基本的形态学算法1、边界提取2、孔洞填充3、连通分量提取4、凸壳5、细化6、粗化7、骨架8、形态学重建三、灰度级形态学1、腐蚀和膨胀2、开运算和闭运算3、灰度级形态学算法 一、腐蚀与膨胀 1、腐蚀 腐蚀可以去除图像的某些部分。 2、膨胀 膨胀可以连接裂缝。 3、对偶性 膨胀和腐蚀彼此关于集合求补运算和反射运算是对偶的 4、开操作与闭操作 开操作:B对A先腐蚀,再进行膨胀 可以平滑物体轮廓,断开较窄的狭颈并消除较细的突出物。 闭操作

方悔读书迟 1373

Java-http连接池的使用

最近项目中开发有很多外部http调用,但是我方的接口相应有时效性要求,所以就需要针对项目使用到的http调用进行连接池改造,原先没做也是时效性要求不是很严格,但是现在需要了,就需要整体调整,这也是对原先开发不负责的后果吧。 废话不多说,项目中使用到的http调用方式,这个方式有三种,为啥有三种也不多说了,谁让建项初期没做严格要求,导致大家都是使用自己习惯的方式去完成的设计。 目前有三种:httpclient、resttemplate、feign,接下来针对一样一样的记录了。 1、httpclient

撸码人 5289

UniTouch:多模态触觉对齐技术如何重塑零样本跨模态应用

UniTouch模型通过创新的多模态触觉对齐技术,成功将触觉数据映射到通用的视觉-语言嵌入空间,解决了触觉模态的“孤岛困境”。该技术利用对比学习和传感器特定标记,实现了高质量的零样本学习能力,使模型无需额外训练即可完成触觉分类、描述等任务,并能驱动跨模态生成,为机器人、VR和智能制造等领域提供了强大的触觉理解新范式。

weixin_29044713的博客 409

HttpClient调用

httpclient调用

真正的大师永远怀着一颗学徒的心 1751

EPLAN 电气制图(六):结构盒与设备管理器核心概念(基础知识选看)

结构盒是 EPLAN 中用于标识元件安装位置的逻辑容器,非实际设备或黑盒,仅用于原理图中划分功能区域或物理位置(如 “柜内”“柜外”)。标识符设置:在 “显示设备标识符” 中输入位置代号(如 “+ 柜外”),完整格式为 “= 高层代号 + 位置代号”;筛选与定位:通过 “筛选器” 按类别(如电机、接触器)快速查找设备,右键 “转到(图形)” 可高亮定位图纸中的元件;设备保护:重要设备可启用保护(【项目数据】→【设备】→【启用设备保护】),防止误删除(显示橙色圆圈标记)。

电工 1056

【补充篇】三万字了解AUTOSAR软件架构(一)

主要讲解了AUTOSAR软件架构的分层及各个栈的作用

weixin_47571898的博客 1116

java发送请求_Java模拟HTTP的Get和Post请求(增强)

Java模拟HTTP的Get和Post请求(增强)在之前,写了篇Java模拟HTTP的Get和Post请求的文章,这篇文章起源与和一个朋友砍飞信诈骗网站的问题,于是动用了Apache的comments-net包,也实现了get和post的http请求,并且将响应html代码获取。可是细心的博友提出:在获取有些网站出现乱码,最后发现没有处理字符集,这里做针对博友的意见做了增强,增强部分主要是响应内容...

weixin_28848317的博客 248

使用CubeMX配置STM32H7的FreeRTOS

本文将介绍如何使用CubeMX配置STM32H7的FreeRTOS,并提供相应的源代码示例。通过使用CubeMX,你可以轻松地配置FreeRTOS和系统资源,并生成相应的初始化代码和配置文件。在"FreeRTOS"选项卡的"Tasks"部分,可以配置系统中的任务。首先,打开CubeMX软件。在"FreeRTOS"选项卡的"Resources"部分,你可以配置FreeRTOS使用的资源,例如,堆内存和信号量。例如,我们可以创建两个简单的任务,一个任务将在循环中切换LED的状态,另一个任务将通过串口打印消息。

JeeVue的博客 711

java 模拟get post请求_[Java] 模拟HTTP的Get和Post请求

在之前,写了篇Java模拟HTTP的Get和Post请求的文章,这篇文章起源与和一个朋友砍飞信诈骗网站的问题,于是动用了Apache的comments-net包,也实现了get和post的http请求,并且将响应html代码获取。可是细心的博友提出:在获取有些网站出现乱码,最后发现没有处理字符集,这里做针对博友的意见做了增强,增强部分主要是响应内容的字符编码、相应代码的美化选项。下面是代码:imp...

weixin_34072296的博客 355

HighTec安装使用

HighTec安装使用

qq_43552564的博客 3833

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java模拟HTTP的Get和Post请求(增强)

Java模拟HTTP的Get和Post请求(增强)   在之前,写了篇Java模拟HTTP的Get和Post请求的文章,这篇文章起源与和一个朋友砍飞信诈骗网站的问题,于是动用了Apache的comments-net包,也实现了get和post的http请求,并且将响应html代码获取。可是细心的博友提出:在获取有些网站出现乱码,最后发现没有处理字符集,这里做针对博友的意见做了增强,增强部分主要...

weixin_34238633的博客 182

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【转】Java模拟http请求,调用外部api接口(一):HttpURLConnection和HttpClient的区别...

  JAVA中,java.net.HttpURLConnection 和 org.apache.http.client.HttpClient两个类,都可以模拟实现HTTP请求。   其中,HttpURLConnection 是jdk提供的类,其实现了http请求的所有操作,但由于其方法偏向于原子操作,因此,HttpURLConnection适合于简单的http请求,而对于复杂的http...

weixin_30559481的博客 249

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

[Java] 模拟HTTP的Get和Post请求

在之前,写了篇Java模拟HTTP的Get和Post请求的文章,这篇文章起源与和一个朋友砍飞信诈骗网站的问题,于是动用了Apache的comments-net包,也实现了get和post的http请求,并且将响应html代码获取。可是细心的博友提出:在获取有些网站出现乱码,最后发现没有处理字符集,这里做针对博友的意见做了增强,增强部分主要是响应内容的字符编码、相应代码的美化选项。 下面是代码: ...

weixin_30414155的博客 70

从HttpClient 4.x升级到5.x:实战避坑指南与API重构详解

HTTP客户端是网络编程中的基础组件,负责在应用间进行数据通信。其核心原理是通过封装TCP连接、请求构建与响应解析,实现高效可靠的数据传输。在Java生态中,Apache HttpClient因其稳定性和丰富的功能被广泛使用。随着技术演进,新版HttpClient 5在架构上进行了重大重构,旨在提升高并发下的吞吐量、优化资源管理,并提供更现代的Fluent API。这些改进对于构建高性能微服务、处理大量外部API调用等场景具有重要价值。本次升级实践聚焦于依赖管理、连接池配置和请求执行模型等关键模块,深入分析

weixin_30628801的博客 484

JMeter取样器深度解析:从HTTP到TCP,精准模拟协议的性能测试核心

在软件性能测试领域,协议模拟是评估系统承载能力的关键环节。其核心原理在于通过工具精确模拟客户端行为,生成符合特定协议规范的数据请求,以测量服务器在高并发下的响应时间、吞吐量等指标。这项技术的价值在于,它能帮助开发者与测试工程师提前发现系统瓶颈,优化代码与架构,保障线上服务的稳定性与用户体验。无论是Web服务、数据库还是自定义二进制协议,都需要对应的模拟策略。JMeter作为主流的性能测试工具,其内置的取样器正是实现这一目标的利器。本文聚焦于JMeter的HTTP请求、JDBC请求、TCP取样器等核心组件,深

weixin_34211761的博客 1026

HTTP QUERY方法:解决复杂查询的语义困境与实战指南

在RESTful API设计与Web服务开发中,HTTP方法的选择直接影响着接口的语义清晰度与工程实践。GET方法因其安全与幂等特性,常用于数据检索,但其URL长度限制与结构化数据表达能力不足,在处理复杂查询条件时面临挑战。POST方法虽能通过请求体传输复杂数据,却因其‘创建资源’的核心语义,在用于查询时造成了语义污染,破坏了API的自我描述性,并为缓存、监控等基础设施带来困惑。这一矛盾催生了HTTP协议的新成员——QUERY方法。作为IETF官方RFC引入的安全且幂等方法,QUERY旨在明确‘查询’操作的

weixin_30367873的博客 397

基于Burp Extender API构建高并发动态代理HTTP请求测试平台

在网络安全测试与API压力测试领域,HTTP/HTTPS请求的自动化发送与代理IP管理是核心技术环节。其原理在于通过程序化控制请求的构造、发送与代理切换,模拟真实用户行为或进行高强度测试。这项技术的核心价值在于能够显著提升安全扫描、模糊测试、业务逻辑漏洞探测等场景的效率和覆盖度,尤其适用于需要规避IP封锁或模拟分布式访问的复杂测试环境。通过集成商业代理池服务,可以实现IP的动态轮换与高匿名性访问。本文聚焦于利用Burp Suite的Extender API,将Burp从手动抓包工具扩展为支持高并发、自动化且

weixin_34109408的博客 403

JMeter从入门到实战:HTTP性能压测全流程指南与瓶颈分析

性能测试是软件工程中确保系统可靠性和可扩展性的关键环节,其核心在于通过模拟真实用户行为来量化系统能力。Apache JMeter作为一款开源的负载测试工具,基于Java平台构建,通过多线程机制模拟并发用户,对Web应用、API服务等进行压力测试,以评估其在高负载下的响应时间、吞吐量和稳定性。在工程实践中,JMeter的价值在于帮助开发者发现系统瓶颈、验证优化效果并进行容量规划,广泛应用于电商大促、API服务验证等场景。本文聚焦HTTP压测实战,详细解析如何利用JMeter进行脚本编写、分布式压测和结果分析,

weixin_34150830的博客 352

JDK 17核心新特性实战:从Record到模式匹配的现代Java开发指南

Java作为企业级应用开发的主流语言,其版本演进始终围绕提升开发效率与运行时性能两大核心目标。从语言层面看,新特性通过增强类型系统与简化语法来提升代码的表达力与安全性;从虚拟机层面看,垃圾回收器等底层优化则致力于满足云原生时代对低延迟、高吞吐的需求。这些技术演进的价值在于,它们能帮助开发者编写更简洁、健壮的代码,同时让应用更好地运行在微服务、容器化等现代架构中。具体到JDK 17这一长期支持版本,其引入的记录类(Record)通过自动生成样板代码,极大地简化了数据载体类的定义;而模式匹配(Pattern M

weixin_34315485的博客 376
上一篇: Java发送Http请求,解析html返回
下一篇: Java中的五种单例模式实现方法
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值