httpUtil工具类

httpUtil工具类importjava io BufferedRead importjava io BufferedWrit importjava io DataInputStr importjava io DataOutputSt importjava io File importjava io FileInputStr importjava io InputStream importjava io InputStreamR importjava i

 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.security.SecureRandom; import java.security.cert.X509Certificate; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import javax.annotation.Resource; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.springframework.stereotype.Component; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; / * 模拟浏览器请求任何一个网址 * @author */ @Component("httpUtil") public class HttpUtil { 
    /* 文件工具类 */ @Resource private FileUtil fileUtil; public class TrustAnyHostnameVerifier implements HostnameVerifier { 
    public boolean verify(String hostname, SSLSession session) { 
    // 直接返回true return true; } } / * 输入一个url, * 返回这个url对应的html代码 * * @param url:网址 * @return 返回网址对应的html代码 */ public static String methodGet(String urlStr) { 
    //ConstatFinalUtil.SYS_LOGGER.info("--methodGet--url:{}",urlStr); StringBuffer sb = new StringBuffer() ; try { 
    URL url = new URL(urlStr); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); /* 获取网址对应的输入流和输出流 */ InputStream is = connection.getInputStream() ; BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); String line = "" ; while((line = br.readLine()) != null) { 
    sb.append(line); } } catch (Exception e) { 
    e.printStackTrace(); } return sb.toString() ; } / * 输入一个url, * 返回这个url对应的html代码 * * @param url:网址 * @param paramsMap 提交参数;键=值 * @return 返回网址对应的html代码 */ public String methodPost(String urlStr,Map<String, String> paramsMap) { 
    //ConstatFinalUtil.SYS_LOGGER.info("--methodGet--url:{}",urlStr); StringBuffer sb = new StringBuffer() ; try { 
    URL url = new URL(urlStr); HttpURLConnection connection = (HttpURLConnection) url.openConnection() ; /* Post请求,必须加以下操作 */ connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestMethod("POST"); /* 获取网址对应的输入流和输出流 */ OutputStream os = connection.getOutputStream() ; BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); /* 先向服务器写数据 * 如何将我们的参数写到输出流呢??? * 得遵循HTTP协议,看浏览器怎么做,我们也怎么做 * * URL get中的字符串 * method=submit&email=aaa&password=bbbb * */ StringBuffer paramSb = new StringBuffer() ; for (Iterator iterator = paramsMap.entrySet().iterator(); iterator.hasNext();) { 
    Entry me = (Entry) iterator.next(); String key = me.getKey() + ""; String value = me.getValue() + "" ; paramSb.append(key + "=" + value + "&"); } /* * method=submit&email=aaa&password=bbbb * email=bb&method=submit&password=cc * */ bw.write(paramSb.toString()); bw.flush(); bw.close(); InputStream is = connection.getInputStream() ; BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); String line = "" ; while((line = br.readLine()) != null) { 
    sb.append(line); } br.close(); } catch (Exception e) { 
    e.printStackTrace(); } return sb.toString() ; } public static void main(String[] args) { 
    HttpUtil httpUtil = new HttpUtil() ; /*String url = "http://c.v..com/vchannelinfo?otype=json&uin=d32c9189aaabe3c6c6aff3832c&qm=1&pagenum=3&num=10&sorttype=0&orderflag=0&callback=jQuery_45&low_login=1&_=56" ; String res = httpUtil.methodGet(url); System.out.println(res);*/ String ceshString ="{json={\"method\":\"verifyAdminsAuth\",\"data\":{\"currentUrl\":\"/carConAll-web-back/back/vehicle/vehHistoryList.htm?from=home\",\"adminsId\":2},\"encrypt\":\"e12299c068c5e8dd3a1e30ed9780b82721940a7779abfeaecbb409a9466fd673\",\"version\":\"1\",\"pubKey\":\"\"}}"; JSONObject parse = (JSONObject) JSON.parse(ceshString); /* * String url = "http://localhost:10001/shop-web-head/insert.jsp" ; * Map 
   
     paramsMap = new HashMap 
    
      (); * paramsMap.put("email", "bb"); paramsMap.put("password", "cc"); * paramsMap.put("method", "submit"); String res = * httpUtil.methodPost(url,paramsMap); */ 
     
    System.out.println(parse); } / * 下载文件 */ public boolean downLoadFile(Map<String, String> headerMap,Map<String, String> paramsMap,OutputStream os) { 
    HttpURLConnection connect = null ; try { 
    URL url = new URL(paramsMap.get("requestURL")); connect = (HttpURLConnection) url .openConnection(); connect.setConnectTimeout(ConstatFinalUtil.REQ_CONNECT_TIMEOUT); connect.setReadTimeout(ConstatFinalUtil.READ_TIMEOUT); StringBuffer paramssb = new StringBuffer(); for (Iterator iterator = paramsMap.entrySet().iterator(); iterator .hasNext();) { 
    Map.Entry me = (Map.Entry) iterator.next(); if (!"requestURL".equalsIgnoreCase(me.getKey() + "") && !"retry".equalsIgnoreCase(me.getKey() + "")) { 
    paramssb.append(me.getKey() + "=" + me.getValue() + "&"); } } if (paramssb.toString().endsWith("&")) { 
    paramssb.delete(paramssb.length() - 1, paramssb.length()); } connect.setRequestProperty( "Cookie", "Hm_lvt_2d57a0f88eed9744a82604dcfa102e49=; CNZZDATA=cnzz_eid%3D--http%253A%252F%252Fwww.btctrade.com%26ntime%3D%26cnzz_a%3D5%26ltime%3D33%26rtime%3D1; pgv_pvi=; __utma=.....3; __utmz=..1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); wafenterurl=/; wafcookie=51a45aee92bbd8cc281e98e91; __utmb=.1.10.; __utmc=; wafverify=afe13eda6d99c7f141d7dd3966b59d9e; USER_PW=ab3f61ee826a95e51734cf; PHPSESSID=9f2c19d6ffd0ef808ba8bac0b74ab0f3; IESESSION=alive; pgv_si=s"); connect.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko/ Firefox/25.0"); for (Iterator iterator = headerMap.entrySet().iterator(); iterator .hasNext();) { 
    Entry me = (Entry) iterator.next(); connect.setRequestProperty(me.getKey() + "", me.getValue() + ""); } InputStream is = connect.getInputStream() ; return this.fileUtil.copyFile(is, os); }catch (Exception e) { 
    try { 
    ConstatFinalUtil.SYS_LOGGER.info("http的Post请求失败了;响应码:{};请求头:{};请求体:{}", connect != null ? connect.getResponseCode() : connect,headerMap,paramsMap,e); Thread.sleep(ConstatFinalUtil.PAGE_BATCH_SIZE); } catch (Exception e1) { 
    e1.printStackTrace(); } } return false; } / * 上传文件 * @param requestMap 双传文件的信息 * @param filePath * @return */ public String methodUploadFile(Map<String, String> headerMap,Map<String, String> requestMap) { 
    String urlStr = headerMap.get("requestURL"); if(!urlStr.endsWith("?")) { 
    urlStr = urlStr + "?" ; } for (Iterator iterator = requestMap.entrySet().iterator(); iterator.hasNext();) { 
    Entry me = (Entry) iterator.next(); String key = me.getKey() + "" ; String val = me.getValue() + "" ; urlStr = urlStr + "&" + key + "=" + val ; } /* 返回值 */ StringBuffer sbRes = new StringBuffer() ; String filePath = requestMap.get("filePath"); try { 
    // 换行符 final String newLine = "\r\n"; final String boundaryPrefix = "--"; // 定义数据分隔线 String BOUNDARY = "========7d4a6d158c9"; // 服务器的域名 URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置为POST请求 conn.setRequestMethod("POST"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); // 设置请求头参数 conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("Charsert", "UTF-8"); conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); OutputStream out = new DataOutputStream(conn.getOutputStream()); // 上传文件 File file = new File(filePath); StringBuilder sb = new StringBuilder(); sb.append(boundaryPrefix); sb.append(BOUNDARY); sb.append(newLine); // 文件参数,photo参数名可以随意修改 sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + filePath + "\"" + newLine); sb.append("Content-Type:application/octet-stream"); // 参数头设置完以后需要两个换行,然后才是参数内容 sb.append(newLine); sb.append(newLine); // 将参数头的数据写入到输出流中 out.write(sb.toString().getBytes()); // 数据输入流,用于读取文件数据 DataInputStream in = new DataInputStream(new FileInputStream(file)); byte[] bufferOut = new byte[1024]; int bytes = 0; // 每次读1KB数据,并且将文件数据写入到输出流中 while ((bytes = in.read(bufferOut)) != -1) { 
    out.write(bufferOut, 0, bytes); } // 最后添加换行 out.write(newLine.getBytes()); in.close(); // 定义最后数据分隔线,即--加上BOUNDARY再加上--。 byte[] end_data = (newLine + boundaryPrefix + BOUNDARY + boundaryPrefix + newLine).getBytes(); // 写上结尾标识 out.write(end_data); out.flush(); out.close(); // 定义BufferedReader输入流来读取URL的响应 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { 
    sbRes.append(line); } } catch (Exception e) { 
    ConstatFinalUtil.SYS_LOGGER.error("上传文件失败了;文件名:{}",filePath , e); } return sbRes.toString() ; } / * Post请求 * * @param headerMap * 请求头 * @param paramsMap * 请求体参数 * @return */ public String methodPost(Map<String, String> headerMap, Map<String, String> paramsMap) { 
    StringBuffer sb = new StringBuffer(); //如果是https协议 if(paramsMap.get("requestURL").startsWith("https")) { 
    return this.methodHttpsPost(headerMap, paramsMap); } // 连续请求多次 for (int i = 0; i < ConstatFinalUtil.REQ_COUNT; i++) { 
    sb.delete(0, sb.length()); HttpURLConnection connect = null ; try { 
    URL url = new URL(paramsMap.get("requestURL")); connect = (HttpURLConnection) url .openConnection(); connect.setConnectTimeout(ConstatFinalUtil.REQ_CONNECT_TIMEOUT); connect.setReadTimeout(ConstatFinalUtil.READ_TIMEOUT); connect.setDoInput(true); connect.setDoOutput(true); StringBuffer paramssb = new StringBuffer(); for (Iterator iterator = paramsMap.entrySet().iterator(); iterator .hasNext();) { 
    Map.Entry me = (Map.Entry) iterator.next(); if (!"requestURL".equalsIgnoreCase(me.getKey() + "") && !"retry".equalsIgnoreCase(me.getKey() + "")) { 
    paramssb.append(me.getKey() + "=" + me.getValue() + "&"); } } if (paramssb.toString().endsWith("&")) { 
    paramssb.delete(paramssb.length() - 1, paramssb.length()); } connect.setRequestProperty( "Cookie", "Hm_lvt_2d57a0f88eed9744a82604dcfa102e49=; CNZZDATA=cnzz_eid%3D--http%253A%252F%252Fwww.btctrade.com%26ntime%3D%26cnzz_a%3D5%26ltime%3D33%26rtime%3D1; pgv_pvi=; __utma=.....3; __utmz=..1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); wafenterurl=/; wafcookie=51a45aee92bbd8cc281e98e91; __utmb=.1.10.; __utmc=; wafverify=afe13eda6d99c7f141d7dd3966b59d9e; USER_PW=ab3f61ee826a95e51734cf; PHPSESSID=9f2c19d6ffd0ef808ba8bac0b74ab0f3; IESESSION=alive; pgv_si=s"); connect.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko/ Firefox/25.0"); for (Iterator iterator = headerMap.entrySet().iterator(); iterator .hasNext();) { 
    Entry me = (Entry) iterator.next(); connect.setRequestProperty(me.getKey() + "", me.getValue() + ""); } BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( connect.getOutputStream())); bw.write(paramssb.toString()); bw.flush(); BufferedReader br = null ; //响应码成功 if(connect.getResponseCode() == 200) { 
    br = new BufferedReader(new InputStreamReader( connect.getInputStream(), "UTF-8")); }else { 
    if(connect.getErrorStream() != null) { 
    br = new BufferedReader(new InputStreamReader( connect.getErrorStream(), "UTF-8")); }else { 
    br = new BufferedReader(new InputStreamReader( connect.getInputStream(), "UTF-8")); } } String line = ""; while ((line = br.readLine()) != null) { 
    sb.append(line.trim()); } br.close(); bw.close(); //正常返回直接退出 if(connect.getResponseCode() != 200) { 
    ConstatFinalUtil.SYS_LOGGER.info("重试次数:{},响应码:{};响应信息:{};返回信息:{};请求头:{};请求体:{}", i,connect.getResponseCode(),connect.getResponseMessage(),sb,headerMap,paramsMap); } break ; }catch (Exception e) { 
    try { 
    ConstatFinalUtil.SYS_LOGGER.info("http的Post请求失败了;重试次数:{},响应码:{};返回信息:{};请求头:{};请求体:{}", i,connect != null ? connect.getResponseCode() : connect,sb,headerMap,paramsMap,e); Thread.sleep(ConstatFinalUtil.PAGE_BATCH_SIZE); } catch (Exception e1) { 
    e1.printStackTrace(); } } //重试机制 if(!"true".equalsIgnoreCase(headerMap.get("retry"))) { 
    break ; } } //没有查询到数据,调用https if(sb.length() <= 0) { 
    return this.methodHttpsPost(headerMap, paramsMap); } return sb.toString(); } / * HttpsPost请求 * * @param headerMap * 请求头参数 * @param paramsMap * 请求体参数 * @return */ public String methodHttpsPost(Map<String, String> headerMap, Map<String, String> paramsMap) { 
    StringBuffer sb = new StringBuffer(); // 连续请求多次 for (int i = 0; i < ConstatFinalUtil.REQ_COUNT; i++) { 
    sb.delete(0, sb.length()); HttpsURLConnection connect = null ; try { 
    // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] { 
    new X509TrustManager() { 
    public X509Certificate[] getAcceptedIssuers() { 
    return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { 
    } public void checkServerTrusted(X509Certificate[] certs, String authType) { 
    } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, trustAllCerts, new SecureRandom()); HttpsURLConnection .setDefaultSSLSocketFactory(sc.getSocketFactory()); URL url = new URL(paramsMap.get("requestURL")); connect = (HttpsURLConnection) url .openConnection(); connect.setHostnameVerifier(new TrustAnyHostnameVerifier()); connect.setConnectTimeout(ConstatFinalUtil.REQ_CONNECT_TIMEOUT); connect.setReadTimeout(ConstatFinalUtil.READ_TIMEOUT); connect.setDoInput(true); connect.setDoOutput(true); connect.setRequestProperty( "Cookie", "Hm_lvt_2d57a0f88eed9744a82604dcfa102e49=; CNZZDATA=cnzz_eid%3D--http%253A%252F%252Fwww.btctrade.com%26ntime%3D%26cnzz_a%3D5%26ltime%3D33%26rtime%3D1; pgv_pvi=; __utma=.....3; __utmz=..1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); wafenterurl=/; wafcookie=51a45aee92bbd8cc281e98e91; __utmb=.1.10.; __utmc=; wafverify=afe13eda6d99c7f141d7dd3966b59d9e; USER_PW=ab3f61ee826a95e51734cf; PHPSESSID=9f2c19d6ffd0ef808ba8bac0b74ab0f3; IESESSION=alive; pgv_si=s"); connect.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko/ Firefox/25.0"); StringBuffer paramssb = new StringBuffer(); for (Iterator iterator = paramsMap.entrySet().iterator(); iterator .hasNext();) { 
    Map.Entry me = (Map.Entry) iterator.next(); if (!"requestURL".equalsIgnoreCase(me.getKey() + "")) { 
    paramssb.append(me.getKey() + "=" + me.getValue() + "&"); } } if (paramssb.toString().endsWith("&")) { 
    paramssb.delete(paramssb.length() - 1, paramssb.length()); } // ConstatFinalUtil.LOGGER.info("-----"+ paramssb); for (Iterator iterator = headerMap.entrySet().iterator(); iterator .hasNext();) { 
    Entry me = (Entry) iterator.next(); if (!"requestURL".equalsIgnoreCase(headerMap.get("requestURL"))) { 
    connect.setRequestProperty(me.getKey() + "", me.getValue() + ""); } } connect.setRequestProperty( "Cookie", "Hm_lvt_2d57a0f88eed9744a82604dcfa102e49=; CNZZDATA=cnzz_eid%3D--http%253A%252F%252Fwww.btctrade.com%26ntime%3D%26cnzz_a%3D5%26ltime%3D33%26rtime%3D1; pgv_pvi=; __utma=.....3; __utmz=..1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); wafenterurl=/; wafcookie=51a45aee92bbd8cc281e98e91; __utmb=.1.10.; __utmc=; wafverify=afe13eda6d99c7f141d7dd3966b59d9e; USER_PW=ab3f61ee826a95e51734cf; PHPSESSID=9f2c19d6ffd0ef808ba8bac0b74ab0f3; IESESSION=alive; pgv_si=s"); connect.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko/ Firefox/25.0"); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( connect.getOutputStream())); bw.write(paramssb.toString()); bw.flush(); BufferedReader br = null ; //响应码成功 if(connect.getResponseCode() == 200) { 
    br = new BufferedReader(new InputStreamReader( connect.getInputStream(), "UTF-8")); }else { 
    if(connect.getErrorStream() != null) { 
    br = new BufferedReader(new InputStreamReader( connect.getErrorStream(), "UTF-8")); }else { 
    br = new BufferedReader(new InputStreamReader( connect.getInputStream(), "UTF-8")); } } String line = ""; while ((line = br.readLine()) != null) { 
    sb.append(line.trim()); } br.close(); bw.close(); //正常返回直接退出 if(connect.getResponseCode() != 200) { 
    ConstatFinalUtil.SYS_LOGGER.info("重试次数:{},响应码:{};响应信息:{};返回信息:{};请求头:{};请求体:{}", i,connect.getResponseCode(),connect.getResponseMessage(),sb,headerMap,paramsMap); } break ; } catch (Exception e) { 
    try { 
    ConstatFinalUtil.SYS_LOGGER.info("https的Post请求失败了;重试次数:{},响应码:{};返回信息:{};请求头:{};请求体:{}", i,connect != null ? connect.getResponseCode() : connect,sb,headerMap,paramsMap,e); Thread.sleep(ConstatFinalUtil.PAGE_BATCH_SIZE); } catch (Exception e1) { 
    e1.printStackTrace(); } } //重试机制 if(!"true".equalsIgnoreCase(headerMap.get("retry"))) { 
    break ; } } return sb.toString(); } //新增 百度AI api图片文字识别请求方法 public static String post(String requestUrl, String accessToken, String params) throws Exception { 
    String contentType = "application/x-www-form-urlencoded"; return HttpUtil.post(requestUrl, accessToken, contentType, params); } public static String post(String requestUrl, String accessToken, String contentType, String params) throws Exception { 
    String encoding = "UTF-8"; if (requestUrl.contains("nlp")) { 
    encoding = "GBK"; } return HttpUtil.post(requestUrl, accessToken, contentType, params, encoding); } public static String post(String requestUrl, String accessToken, String contentType, String params, String encoding) throws Exception { 
    String url = requestUrl + "?access_token=" + accessToken; return HttpUtil.postGeneralUrl(url, contentType, params, encoding); } public static String postGeneralUrl(String generalUrl, String contentType, String params, String encoding) throws Exception { 
    URL url = new URL(generalUrl); // 打开和URL之间的连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); // 设置通用的请求属性 connection.setRequestProperty("Content-Type", contentType); connection.setRequestProperty("Connection", "Keep-Alive"); connection.setUseCaches(false); connection.setDoOutput(true); connection.setDoInput(true); // 得到请求的输出流对象 DataOutputStream out = new DataOutputStream(connection.getOutputStream()); out.write(params.getBytes(encoding)); out.flush(); out.close(); // 建立实际的连接 connection.connect(); // 获取所有响应头字段 Map<String, List<String>> headers = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : headers.keySet()) { 
    System.err.println(key + "--->" + headers.get(key)); } // 定义 BufferedReader输入流来读取URL的响应 BufferedReader in = null; in = new BufferedReader( new InputStreamReader(connection.getInputStream(), encoding)); String result = ""; String getLine; while ((getLine = in.readLine()) != null) { 
    result += getLine; } in.close(); System.err.println("result:" + result); return result; } } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216466.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午11:47
下一篇 2026年3月18日 上午11:48


相关推荐

  • eureka 集群失败的原因_Eureka集群的那些坑

    eureka 集群失败的原因_Eureka集群的那些坑今天遇到一个Eureka集群的一个坑。问题现场类似是这样的:两台Eureka组成的服务注册中心集群,两台服务提供方server1、server2,两个服务调用方client1、client2。正常的情况下:client1和client2通过服务中心获取的服务提供方的注册的元数据信息,然后本地缓存调用server2、server1的服务API是没问题的。调用server的api服务时采用的Feign…

    2022年5月8日
    183
  • IP切换器哪个最好用?

    IP切换器哪个最好用?首先要回答这个问题 需要弄清楚以下几点 我们才能更好的判断 ip 是上网的身份唯一标识 IP 切换器即代理服务器是一种重要切换 ip 的安全功能 通过中间代理服务器改变你原有的电脑 手机 ip 地址去访问你请求的网络地址 很好的保护个人信息安全 提高网络访问速度 有了它之后 Request 信号会先送到代理服务器 由代理服务器来取回浏览器所需要的信息并传送给你的浏览器 在日常生活中 我们使用 IP 切换器 大多数是用来连接 INTERNET 国际互联网 和 INTRANET 局域网 说到 IP 切换器方面的特点 这是非常多的

    2026年3月20日
    1
  • 常见的测试用例设计方法_条件覆盖测试用例

    常见的测试用例设计方法_条件覆盖测试用例文章目录前言测试用例概述常见用例设计方法等价类边界值用例设计考虑层面复杂系统如何设计用例结尾前言大家好,我是洋子。今天给大家分享在做软件测试时,最容易忽略但却重要的知识点,那就是测试用例设计。用例设计就是软件测试工程师的灵魂,体现了你的测试思维,以及对业务需求的熟悉程度。有时侯出现线上事故,可能就是测试用例没有覆盖全面测试用例概述考虑部分同学是转行做软件测试,我先说一下测试用例是什么测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需

    2022年10月10日
    6
  • 数据格式汇总及type, astype, dtype区别「建议收藏」

    数据格式汇总及type, astype, dtype区别「建议收藏」标签(空格分隔):pythonuint8在此输入正文8位的无符号整形数据取值范围从0到255一singed与unsigned的区别二float改变类型643264to32shape翻倍改变类型321632to16shape翻倍改变类型32float32tofloatshape还原float默认是float64改变类型float64intfloat64

    2022年6月11日
    43
  • 1602驱动电路_lcd1602的a和k接哪里

    1602驱动电路_lcd1602的a和k接哪里       今天我也开博了,一个前辈的话对我触动很大:不会分享,不懂总结,就不要做技术。这也是我这博客的目的,望各路过高手菜鸟多多指教。          搞了几天的1062a终于调通了。前段时间把8位总线的调通了,这个简单,网上资料也多。以前写程序一般都是网上找资料后自已再改,这次1062a四位驱动的程序网上也有,我下了好多版本结果都不行,就这样我也堵在这几天了。这说明我的底层程序

    2026年2月14日
    4
  • Linux-dosbox使用「建议收藏」

    2019独角兽企业重金招聘Python工程师标准>>>…

    2022年4月9日
    141

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号