原文:http://www.cnblogs.com/nayitian/p/3282029.html

新版HttpClient4.2与之前的3.x版本有了很大变化,建议从http://hc.apache.org/处以得到最新的信息。

  1. 关于HttpCore与HttpClient:HttpCore是位于HTTP传输组件的底层包,可以用来简化HTTP客户端与服务器端的开发。HttpClient是一个符合HTTP1.1版本,基于HttpCore类包的一个实现。它同时为客户端认证、HTTP状态管理、HTTP连接管理提供了可重用的客户端组件。HttpCore类包目前最新发布版本是httpcore-4.2.4;HttpClient类包的版本是httpclient-4.2.5。
    了解到HttpCore包与HttpClient包的差别,在程序中就应该大致知道一些包它们存在于哪个类库中。比如:org.apache.http包属于HttpCore,而org.apache.http.client包属于HttpClient。
  2. HttpClient的API文档在下载的zip中已经包括;
    HttpCore的API文档可以参考:http://hc.apache.org/httpcomponents-core-4.2.x/httpcore/apidocs/index.html
  3. HttpClient4.2需要Java 5.0及以上版本;需要支持包有(下载zip包中已经包括):
    * Apache HttpComponents HttpCore
    * Apache Commons Logging
    * Apache Commons Codec

1. 获取一个HTML页面的内容,一个简单的get应用

    // 获取一个HTML页面的内容,一个简单的get应用public void grabPageHTML() throws Exception {HttpClient httpclient = new DefaultHttpClient();HttpGet httpget = new HttpGet("http://www.baidu.com/");HttpResponse response = httpclient.execute(httpget);HttpEntity entity = response.getEntity();String html = EntityUtils.toString(entity, "GBK");// releaseConnection等同于reset,作用是重置request状态位,为下次使用做好准备。// 其实就是用一个HttpGet获取多个页面的情况下有效果;否则可以忽略此方法。httpget.releaseConnection();System.out.println(html);}

2. 下载一个文件到本地(本示范中为一个验证码图片)

    // 下载一个文件到本地(本示范中为一个验证码图片)public void downloadFile() throws Exception {String url = "http://www.lashou.com/account/captcha";String destfilename = "D:\\TDDOWNLOAD\\yz.png";HttpClient httpclient = new DefaultHttpClient();HttpGet httpget = new HttpGet(url);File file = new File(destfilename);if (file.exists()) {file.delete();}HttpResponse response = httpclient.execute(httpget);HttpEntity entity = response.getEntity();InputStream in = entity.getContent();try {FileOutputStream fout = new FileOutputStream(file);int l = -1;byte[] tmp = new byte[2048]; while ((l = in.read(tmp)) != -1) {fout.write(tmp);} fout.close();} finally {// 在用InputStream处理HttpEntity时,切记要关闭低层流。in.close();}httpget.releaseConnection();}

3. Post方法,模拟表单提交参数登录到网站并打开会员页面获取内容(会话保持)

    // Post方法,模拟表单提交参数登录到网站。// 结合了上面两个方法:grabPageHTML/downloadFile,同时增加了Post的代码。public void login2Lashou() throws Exception {// 第一步:先下载验证码到本地String url = "http://www.lashou.com/account/captcha";String destfilename = "D:\\TDDOWNLOAD\\yz.png";HttpClient httpclient = new DefaultHttpClient();HttpGet httpget = new HttpGet(url);File file = new File(destfilename);if (file.exists()) {file.delete();}HttpResponse response = httpclient.execute(httpget);HttpEntity entity = response.getEntity();InputStream in = entity.getContent();try {FileOutputStream fout = new FileOutputStream(file);int l = -1;byte[] tmp = new byte[2048]; while ((l = in.read(tmp)) != -1) {fout.write(tmp);} fout.close();} finally {in.close();}httpget.releaseConnection();
        // 第二步:用Post方法带若干参数尝试登录,需要手工输入下载验证码中显示的字母、数字BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入下载下来的验证码中显示的数字...");String yan = br.readLine();HttpPost httppost = new HttpPost("http://www.lashou.com/account/login/");List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("user_id", "testuser007"));params.add(new BasicNameValuePair("pwd", "asdfg123"));params.add(new BasicNameValuePair("yan", yan));params.add(new BasicNameValuePair("save_user", "on"));params.add(new BasicNameValuePair("save_pwd", "on"));params.add(new BasicNameValuePair("sub", "登录"));httppost.setEntity(new UrlEncodedFormEntity(params));response = httpclient.execute(httppost);entity = response.getEntity();// 在这里可以用Jsoup之类的工具对返回结果进行分析,以判断登录是否成功String postResult = EntityUtils.toString(entity, "GBK"); // 我们这里只是简单的打印出当前Cookie值以判断登录是否成功。List<Cookie> cookies = ((AbstractHttpClient)httpclient).getCookieStore().getCookies();for(Cookie cookie: cookies)System.out.println(cookie);httppost.releaseConnection();
        // 第三步:打开会员页面以判断登录成功(未登录用户是打不开会员页面的)String memberpage = "http://www.lashou.com/account/orders/";httpget = new HttpGet(memberpage);response = httpclient.execute(httpget); // 必须是同一个HttpClient!entity = response.getEntity();String html = EntityUtils.toString(entity, "GBK");httpget.releaseConnection();System.out.println(html);}

输出:

请输入下载下来的验证码中显示的数字...
sbzq
...

[version: 0][name: login_name2][value: testuser007][domain: www.lashou.com][path: /][expiry: Mon Sep 09 10:21:19 CST 2013]
[version: 0][name: pwd2][value: 4c88a4062736c26572d3ec382868fa2b][domain: lashou.com][path: /][expiry: Mon Sep 09 10:21:19 CST 2013]
?<!doctype html>

...

4. 设置代理服务器

    // 设置代理服务器public void testProxy() throws Exception {HttpHost proxy = new HttpHost("127.0.0.1", 8888);// 方式一HttpClient httpclient = new DefaultHttpClient();httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);// 方式二HttpParams params = new BasicHttpParams(); params.setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);HttpClient httpclient1 = new DefaultHttpClient(params);}

5. 几种常用HTTP头的设置

    // 几种常用HTTP头的设置public void testBasicHeader() throws Exception {HttpParams params = new BasicHttpParams(); Collection<BasicHeader> collection = new ArrayList<BasicHeader>();collection.add(new BasicHeader("Accept", "text/html, application/xhtml+xml, */*"));collection.add(new BasicHeader("Referer", "http://www.sina.com/"));collection.add(new BasicHeader("Accept-Language", "zh-CN"));collection.add(new BasicHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)"));collection.add(new BasicHeader("Accept-Encoding", "gzip, deflate"));params.setParameter(ClientPNames.DEFAULT_HEADERS, collection);HttpClient httpclient = new DefaultHttpClient(params);// 下面内容略}

6. 多线程编程下的线程池设置

    // 多线程编程下的线程池设置(这点在需要登录且用一个HttpClient对象抓取多个页面的情况下特别有用)public void testConnectionManager() throws Exception {// 连接池设置SchemeRegistry schemeRegistry = new SchemeRegistry();schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));PoolingClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry);cm.setMaxTotal(200); // 连接池里的最大连接数cm.setDefaultMaxPerRoute(20); // 每个路由的默认最大连接数HttpHost localhost = new HttpHost("locahost", 80); // 可以针对某特定网站指定最大连接数cm.setMaxPerRoute(new HttpRoute(localhost), 30);// 其它设置HttpParams params = new BasicHttpParams(); params.setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);HttpClient httpclient = new DefaultHttpClient(cm, params);// 下面内容略}

7. 测试HTTP上下文对象(HttpContext)

    // 测试HTTP上下文对象(HttpContext)public void testContext() throws Exception {// 请求一个页面,然后解析各上下文对象DefaultHttpClient httpclient = new DefaultHttpClient();HttpContext localContext = new BasicHttpContext();HttpGet httpget = new HttpGet("http://www.baidu.com/");HttpResponse response = httpclient.execute(httpget, localContext);// the actual connection to the target server.HttpConnection conn = (HttpConnection) localContext.getAttribute(ExecutionContext.HTTP_CONNECTION);  System.out.println("Socket timeout: " + conn.getSocketTimeout());  // the connection targetHttpHost target = (HttpHost) localContext.getAttribute(ExecutionContext.HTTP_TARGET_HOST);System.out.println("Final target: " + target);// the connection proxy, if used HttpHost proxy = (HttpHost) localContext.getAttribute(ExecutionContext.HTTP_PROXY_HOST);if (proxy != null)System.out.println("Proxy host/port: " + proxy.getHostName() + "/"+ proxy.getPort());// the actual HTTP requestHttpRequest request = (HttpRequest) localContext.getAttribute(ExecutionContext.HTTP_REQUEST);System.out.println("HTTP version: " + request.getProtocolVersion());Header[] headers = request.getAllHeaders();System.out.println("HTTP Headers: ");for (Header header : headers) {System.out.println("\t" + header.getName() + ": " + header.getValue());}System.out.println("HTTP URI: " + request.getRequestLine().getUri());// the actual HTTP responseresponse = (HttpResponse) localContext.getAttribute(ExecutionContext.HTTP_RESPONSE);HttpEntity entity = response.getEntity();if (entity != null) {System.out.println("Content Encoding:" + entity.getContentEncoding());System.out.println("Content Type:" + entity.getContentType());}// the flag indicating whether the actual request has been fully transmitted to the connection target. System.out.println("Sent flag: " + localContext.getAttribute(ExecutionContext.HTTP_REQ_SENT));
        // 如果没有用到返回entity中的内容,那么要把它消费掉,以保证底层的资源得以释放。entity = response.getEntity();EntityUtils.consume(entity);}    

输出:

Socket timeout: 0
Final target: http://www.baidu.com
HTTP version: HTTP/1.1
HTTP Headers: 
    Host: www.baidu.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.2.5 (java 1.5)
HTTP URI: /
Content Encoding:null
Content Type:Content-Type: text/html;charset=utf-8
Sent flag: true

8. 完整的代码

package com.clzhang.sample.net;import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;import org.apache.http.Header;
import org.apache.http.HttpConnection;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.AbstractHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.ExecutionContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;public class HttpClientSample1 {// 获取一个HTML页面的内容,一个简单的get应用public void grabPageHTML() throws Exception {HttpClient httpclient = new DefaultHttpClient();HttpGet httpget = new HttpGet("http://www.baidu.com/");HttpResponse response = httpclient.execute(httpget);HttpEntity entity = response.getEntity();String html = EntityUtils.toString(entity, "GBK");// releaseConnection等同于reset,作用是重置request状态位,为下次使用做好准备。// 其实就是用一个HttpGet获取多个页面的情况下有效果;否则可以忽略此方法。httpget.releaseConnection();System.out.println(html);}// 下载一个文件到本地(本示范中为一个验证码图片)public void downloadFile() throws Exception {String url = "http://www.lashou.com/account/captcha";String destfilename = "D:\\TDDOWNLOAD\\yz.png";HttpClient httpclient = new DefaultHttpClient();HttpGet httpget = new HttpGet(url);File file = new File(destfilename);if (file.exists()) {file.delete();}HttpResponse response = httpclient.execute(httpget);HttpEntity entity = response.getEntity();InputStream in = entity.getContent();try {FileOutputStream fout = new FileOutputStream(file);int l = -1;byte[] tmp = new byte[2048]; while ((l = in.read(tmp)) != -1) {fout.write(tmp);} fout.close();} finally {// 在用InputStream处理HttpEntity时,切记要关闭低层流。in.close();}httpget.releaseConnection();}// Post方法,模拟表单提交参数登录到网站。// 结合了上面两个方法:grabPageHTML/downloadFile,同时增加了Post的代码。public void login2Lashou() throws Exception {// 第一步:先下载验证码到本地String url = "http://www.lashou.com/account/captcha";String destfilename = "D:\\TDDOWNLOAD\\yz.png";HttpClient httpclient = new DefaultHttpClient();HttpGet httpget = new HttpGet(url);File file = new File(destfilename);if (file.exists()) {file.delete();}HttpResponse response = httpclient.execute(httpget);HttpEntity entity = response.getEntity();InputStream in = entity.getContent();try {FileOutputStream fout = new FileOutputStream(file);int l = -1;byte[] tmp = new byte[2048]; while ((l = in.read(tmp)) != -1) {fout.write(tmp);} fout.close();} finally {in.close();}httpget.releaseConnection();// 第二步:用Post方法带若干参数尝试登录,需要手工输入下载验证码中显示的字母、数字BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入下载下来的验证码中显示的数字...");String yan = br.readLine();HttpPost httppost = new HttpPost("http://www.lashou.com/account/login/");List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("user_id", "testuser007"));params.add(new BasicNameValuePair("pwd", "asdfg123"));params.add(new BasicNameValuePair("yan", yan));params.add(new BasicNameValuePair("save_user", "on"));params.add(new BasicNameValuePair("save_pwd", "on"));params.add(new BasicNameValuePair("sub", "登录"));httppost.setEntity(new UrlEncodedFormEntity(params));response = httpclient.execute(httppost);entity = response.getEntity();// 在这里可以用Jsoup之类的工具对返回结果进行分析,以判断登录是否成功String postResult = EntityUtils.toString(entity, "GBK"); // 我们这里只是简单的打印出当前Cookie值以判断登录是否成功。List<Cookie> cookies = ((AbstractHttpClient)httpclient).getCookieStore().getCookies();for(Cookie cookie: cookies)System.out.println(cookie);httppost.releaseConnection();// 第三步:打开会员页面以判断登录成功(未登录用户是打不开会员页面的)String memberpage = "http://www.lashou.com/account/orders/";httpget = new HttpGet(memberpage);response = httpclient.execute(httpget); // 必须是同一个HttpClient!entity = response.getEntity();String html = EntityUtils.toString(entity, "GBK");httpget.releaseConnection();System.out.println(html);}// 设置代理服务器public void testProxy() throws Exception {HttpHost proxy = new HttpHost("127.0.0.1", 8888);// 方式一HttpClient httpclient = new DefaultHttpClient();httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);// 方式二HttpParams params = new BasicHttpParams(); params.setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);HttpClient httpclient1 = new DefaultHttpClient(params);}// 几种常用HTTP头的设置public void testBasicHeader() throws Exception {HttpParams params = new BasicHttpParams(); Collection<BasicHeader> collection = new ArrayList<BasicHeader>();collection.add(new BasicHeader("Accept", "text/html, application/xhtml+xml, */*"));collection.add(new BasicHeader("Referer", "http://www.sina.com/"));collection.add(new BasicHeader("Accept-Language", "zh-CN"));collection.add(new BasicHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)"));collection.add(new BasicHeader("Accept-Encoding", "gzip, deflate"));params.setParameter(ClientPNames.DEFAULT_HEADERS, collection);HttpClient httpclient = new DefaultHttpClient(params);// 下面内容略}// 多线程编程下的线程池设置(这点在需要登录且用一个HttpClient对象抓取多个页面的情况下特别有用)public void testConnectionManager() throws Exception {// 连接池设置SchemeRegistry schemeRegistry = new SchemeRegistry();schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));PoolingClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry);cm.setMaxTotal(200); // 连接池里的最大连接数cm.setDefaultMaxPerRoute(20); // 每个路由的默认最大连接数HttpHost localhost = new HttpHost("locahost", 80); // 可以针对某特定网站指定最大连接数cm.setMaxPerRoute(new HttpRoute(localhost), 30);// 其它设置HttpParams params = new BasicHttpParams(); params.setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);HttpClient httpclient = new DefaultHttpClient(cm, params);// 下面内容略}// 测试HTTP上下文对象(HttpContext)public void testContext() throws Exception {// 请求一个页面,然后解析各上下文对象DefaultHttpClient httpclient = new DefaultHttpClient();HttpContext localContext = new BasicHttpContext();HttpGet httpget = new HttpGet("http://www.baidu.com/");HttpResponse response = httpclient.execute(httpget, localContext);// the actual connection to the target server.HttpConnection conn = (HttpConnection) localContext.getAttribute(ExecutionContext.HTTP_CONNECTION);  System.out.println("Socket timeout: " + conn.getSocketTimeout());  // the connection targetHttpHost target = (HttpHost) localContext.getAttribute(ExecutionContext.HTTP_TARGET_HOST);System.out.println("Final target: " + target);// the connection proxy, if used HttpHost proxy = (HttpHost) localContext.getAttribute(ExecutionContext.HTTP_PROXY_HOST);if (proxy != null)System.out.println("Proxy host/port: " + proxy.getHostName() + "/"+ proxy.getPort());// the actual HTTP requestHttpRequest request = (HttpRequest) localContext.getAttribute(ExecutionContext.HTTP_REQUEST);System.out.println("HTTP version: " + request.getProtocolVersion());Header[] headers = request.getAllHeaders();System.out.println("HTTP Headers: ");for (Header header : headers) {System.out.println("\t" + header.getName() + ": " + header.getValue());}System.out.println("HTTP URI: " + request.getRequestLine().getUri());// the actual HTTP responseresponse = (HttpResponse) localContext.getAttribute(ExecutionContext.HTTP_RESPONSE);HttpEntity entity = response.getEntity();if (entity != null) {System.out.println("Content Encoding:" + entity.getContentEncoding());System.out.println("Content Type:" + entity.getContentType());}// the flag indicating whether the actual request has been fully transmitted to the connection target. System.out.println("Sent flag: " + localContext.getAttribute(ExecutionContext.HTTP_REQ_SENT));// 如果没有用到返回entity中的内容,那么要把它消费掉,以保证底层的资源得以释放。entity = response.getEntity();EntityUtils.consume(entity);}    public static void main(String[] args) throws Exception {HttpClientSample1 ins = new HttpClientSample1();//        ins.grabPageHTML();
//        ins.downloadFile();ins.login2Lashou();
//        ins.testContext();}
}

转载于:https://www.cnblogs.com/shihaiming/p/7657012.html

Java:HttpClient篇,HttpClient4.2在Java中的几则应用:Get、Post参数、Session(会话)保持、Proxy(代理服务器)设置,多线程设置......相关推荐

  1. Java进阶篇(五)——Java的I/O技术

    程序中,为了永久的保存创建的数据,需要将其保存在磁盘文件中,以便在其它程序中使用它们.Java的I/O技术可以将数据保存到文本文件.二进制文件甚至是ZIP压缩文件中,以达到永久性保存数据的要求. 本篇 ...

  2. [JAVA实战篇] AES加密的JAVA实现及AES算法讲解

    AES加密算法原理 1. S-P结构加密 AES加密算法是2001年由美国提出的互联网加密算法,从密码学的角度来讲,AES是典型的S-P结构加密.什么是S-P结构加密呢,手残博主画了一张图帮助大家理解 ...

  3. java提高篇四_(转)java提高篇(四)-----理解java的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  4. Java入门篇 2021/02/22

    Java入门篇 2021/02/22 Java的三大版本 java三大版本主要包括 JavaSE, JavaME, JavaEE,其中现如今的JavaME已经是很少见了,JavaSE是JavaEE的基 ...

  5. Java JDBC篇1——初识JDBC

    Java JDBC篇1--初识JDBC Java DataBase Connectivity Java 数据库连接(Java语言操作数据库) 1.什么是JDBC 其实是官方定义的一套操作所有关系型数据 ...

  6. 菜鸟学习笔记:Java基础篇2(变量、运算符、流程控制语句、方法)

    菜鸟学习笔记:Java基础篇2 变量 基本概念 变量作用域 final关键字 运算符 算术运算符 比较运算符 逻辑运算符 位运算符 赋值运算符 条件运算符 运算符优先级 Java三种流程控制语句 顺序 ...

  7. Java 基础篇(一)基本概念

    Java 基础篇系列文章目录 Java 基础篇(一)基本概念 Java 基础篇(二)数据类型 Java 基础篇(三)控制逻辑 文章目录 Java 基础篇系列文章目录 Java(软件开发) Java(编 ...

  8. Java提高篇(三四)-----fail-fast机制

    Java提高篇(三四)-----fail-fast机制 在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说 ...

  9. java 反射机制_基础篇:深入解析JAVA反射机制

    反射的概念 java 的放射机制:在程序运行时,程序有能力获取一个类的所有方法和属性:并且对于任意一个对象,可以调用它的任意方法或者获取其属性 通俗解析:java 文件需要编译成. class 文件才 ...

  10. 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析

    来自:好好学java 这篇文章主要介绍Java内存区域,也是作为Java虚拟机的一些最基本的知识,理解了这些知识之后,才能更好的进行Jvm调优或者更加深入的学习,本来这些知识是晦涩难懂的,所以希望能够 ...

最新文章

  1. 95 后哈佛小哥撰写《从零开始的机器学习》,入门必备,书籍资源已开放
  2. Android studio 使用NDK工具实现JNI编程
  3. DockerFile和DockerCompose使用总结
  4. JMeter基础之—录制脚本
  5. c语言 葬礼分号,其实从C语言用分号结尾开始,就是一个悲剧了……
  6. openssl 加密解密 指令_Shell openssl命令加密解密字符串
  7. mapinfo图层导入奥维_(通信技能分享)怎样把谷歌地球上画的路线图导入到测试软件中!...
  8. HYSBZ 2145 悄悄话
  9. ANDROID_SDK_HOME的设置
  10. windows电脑自动安装第三方软件-联想客服建议解决办法
  11. 如何在 Linux 中找到你的 公网IP 地址
  12. 计算机网络在物流领域的应用研究,计算机网络技术在物流经济领域中的应用特点及其作用.doc...
  13. Android 中文API (69) —— BluetoothAdapter[蓝牙]
  14. 使用darknet批量测试图片并保存在指定文件夹下
  15. css 电子数字字体
  16. 第22节 软件工程知识
  17. ubuntu下QQ无法登录解决。
  18. 关于我玩单片机学习路线(个人总结)
  19. bulter机器人_机器人库早报|特拉华大学通过人工智能扩大发展劳动力 1.5 倍
  20. 通过双网卡电脑将网络共享到路由器

热门文章

  1. python爬取景点数据看该去哪里玩——南京篇
  2. Pytorch搭建DenseNet
  3. ubuntu中vim编辑器的安装与基本使用
  4. TMGM外汇平台官网最全测评(2022年版)
  5. 文本分析软件-智分析 SmartAnalyze
  6. 实用工具【SqlPrompt】 【Subline】 【XMind】 【PhotoShop】 【TakeColor】 【Q+】本次只讨论SqlPrompt...
  7. 关于解决vensim9.2版本无法显示中文的办法
  8. Java 实战项目坦克大战,一小时学会制作
  9. 计算机组成原理 王道考研2021 第一章:计算机组成原理概述 -- 计算机硬件的基本组成、认识各个硬件部分
  10. SolidWorks2020无法获得下列许可SOLIDWORKS Standard.Server节点已经关闭或是没有响应。(-96,7,11003)