`
lzkyo
  • 浏览: 475768 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

应用HttpClient来对付各种顽固的WEB服务器

阅读更多

一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等。所访问的这些页面有的仅仅是一些普通的页面,有的需要用户登录后方可使用,或者需要认证以及是一些通过加密方式传输,例如HTTPS。目前我们使用的浏览器处理这些情况都不会构成问题。不过你可能在某些时候需要通过程序来访问这样的一些页面,比如从别人的网页中“偷”一些数据;利用某些站点提供的页面来完成某种功能,例如说我们想知道某个手机号码的归属地而我们自己又没有这样的数据,因此只好借助其他公司已有的网站来完成这个功能,这个时候我们需要向网页提交手机号码并从返回的页面中解析出我们想要的数据来。如果对方仅仅是一个很简单的页面,那我们的程序会很简单,本文也就没有必要大张旗鼓的在这里浪费口舌。但是考虑到一些服务授权的问题,很多公司提供的页面往往并不是可以通过一个简单的URL就可以访问的,而必须经过注册然后登录后方可使用提供服务的页面,这个时候就涉及到COOKIE问题的处理。我们知道目前流行的动态网页技术例如ASP、JSP无不是通过COOKIE来处理会话信息的。为了使我们的程序能使用别人所提供的服务页面,就要求程序首先登录后再访问服务页面,这过程就需要自行处理cookie,想想当你用java.net.HttpURLConnection来完成这些功能时是多么恐怖的事情啊!况且这仅仅是我们所说的顽固的WEB服务器中的一个很常见的“顽固”!再有如通过HTTP来上传文件呢?不需要头疼,这些问题有了“它”就很容易解决了!

  我们不可能列举所有可能的顽固,我们会针对几种最常见的问题进行处理。当然了,正如前面说到的,如果我们自己使用java.net.HttpURLConnection来搞定这些问题是很恐怖的事情,因此在开始之前我们先要介绍一下一个开放源码的项目,这个项目就是Apache开源组织中的httpclient,它隶属于Jakarta的commons项目,目前的版本是2.0RC2。commons下本来已经有一个net的子项目,但是又把httpclient单独提出来,可见http服务器的访问绝非易事。

  Commons-httpclient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以让原来很头疼的事情现在轻松的解决,例如你不再管是HTTP或者HTTPS的通讯方式,告诉它你想使用HTTPS方式,剩下的事情交给httpclient替你完成。本文会针对我们在编写HTTP客户端程序时经常碰到的几个问题进行分别介绍如何使用httpclient来解决它们,为了让读者更快的熟悉这个项目我们最开始先给出一个简单的例子来读取一个网页的内容,然后循序渐进解决掉前进中的所有问题。

  1.读取网页(HTTP/HTTPS)内容

  下面是我们给出的一个简单的例子用来访问某个页面

/*
* Created on 2003-12-14 by Liudong
*/
  
package http.demo;
import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
  
/**
*最简单的HTTP客户端,用来演示通过GET或者POST方式访问某个页面
 *@authorLiudong
*/
  
public class SimpleClient {
public static void main(String[] args) throws IOException
{
 HttpClient client = new HttpClient();
   // 设置代理服务器地址和端口    
  
   //client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);
   // 使用 GET 方法 ,如果服务器需要通过 HTTPS 连接,那只需要将下面 URL 中的 http 换成 https
     HttpMethodmethod=newGetMethod("http://java.sun.com");
   //使用POST方法
   //HttpMethod method = new PostMethod("http://java.sun.com");
   client.executeMethod(method);
   //打印服务器返回的状态
    System.out.println(method.getStatusLine());
   //打印返回的信息
   System.out.println(method.getResponseBodyAsString());
   //释放连接
   method.releaseConnection();
 }
}

  在这个例子中首先创建一个HTTP客户端(HttpClient)的实例,然后选择提交的方法是GET或者POST,最后在HttpClient实例上执行提交的方法,最后从所选择的提交方法中读取服务器反馈回来的结果。这就是使用HttpClient的基本流程。其实用一行代码也就可以搞定整个请求的过程,非常的简单!

  2.以GET或者POST方式向网页提交参数

  其实前面一个最简单的示例中我们已经介绍了如何使用GET或者POST方式来请求一个页面,本小节与之不同的是多了提交时设定页面所需的参数,我们知道如果是GET的请求方式,那么所有参数都直接放到页面的URL后面用问号与页面地址隔开,每个参数用&隔开,例如:http://java.sun.com/?name=liudong&mobile=123456,但是当使用POST方法时就会稍微有一点点麻烦。本小节的例子演示向如何查询手机号码所在的城市,代码如下:

/*
* Created on 2003-12-7 by Liudong
*/
  
package http.demo;
import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
  
/**
*提交参数演示
*该程序连接到一个用于查询手机号码所属地的页面
*以便查询号码段1330227所在的省份以及城市
*@authorLiudong
*/
  
public class SimpleHttpClient {
 public static void main(String[] args) throws IOException {
   HttpClient client = new HttpClient();
   client.getHostConfiguration().setHost( "www.imobile.com.cn" , 80, "http" );
   method = getPostMethod();  // 使用 POST 方式提交数据
   client.executeMethod(method); //打印服务器返回的状态
   System.out.println(method.getStatusLine()); //打印结果页面
   Stringresponse=newString(method.getResponseBodyAsString().getBytes("8859_1"));
   //打印返回的信息
   System.out.println(response);
   method.releaseConnection();
 }
  
 /**
  * 使用 GET 方式提交数据
  *@return
  */
 privatestaticHttpMethodgetGetMethod(){
   returnnewGetMethod("/simcard.php?simcard=1330227");
 }
  
  /**
   * 使用 POST 方式提交数据
   *@return
   */
  
  private static HttpMethod getPostMethod(){
   PostMethod post = new PostMethod( "/simcard.php" );
   NameValuePair simcard = new NameValuePair( "simcard" , "1330227" );
   post.setRequestBody( new NameValuePair[] { simcard});
   return post;
 }
}

  在上面的例子中页面http://www.imobile.com.cn/simcard.php需要一个参数是simcard,这个参数值为手机号码段,即手机号码的前七位,服务器会返回提交的手机号码对应的省份、城市以及其他详细信息。GET的提交方法只需要在URL后加入参数信息,而POST则需要通过NameValuePair类来设置参数名称和它所对应的值。

  3.处理页面重定向

  在JSP/Servlet编程中response.sendRedirect方法就是使用HTTP协议中的重定向机制。它与JSP中的<jsp:forward …>的区别在于后者是在服务器中实现页面的跳转,也就是说应用容器加载了所要跳转的页面的内容并返回给客户端;而前者是返回一个状态码,这些状态码的可能值见下表,然后客户端读取需要跳转到的页面的URL并重新加载新的页面。就是这样一个过程,所以我们编程的时候就要通过HttpMethod.getStatusCode()方法判断返回值是否为下表中的某个值来判断是否需要跳转。如果已经确认需要进行页面跳转了,那么可以通过读取HTTP头中的location属性来获取新的地址。

 

状态码 对应 HttpServletResponse 的常量 详细描述
301 SC_MOVED_PERMANENTLY 页面已经永久移到另外一个新地址
302 SC_MOVED_TEMPORARILY 页面暂时移动到另外一个新的地址
303 SC_SEE_OTHER 客户端请求的地址必须通过另外的 URL 来访问
307 SC_TEMPORARY_REDIRECT 同 SC_MOVED_TEMPORARILY

  下面的代码片段演示如何处理页面的重定向

client.executeMethod(post);
System.out.println(post.getStatusLine().toString());
post.releaseConnection();
// 检查是否重定向
int statuscode = post.getStatusCode();
if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) || (statuscode == HttpStatus.SC_MOVED_PERMANENTLY) || (statuscode == HttpStatus.SC_SEE_OTHER) || (statuscode == HttpStatus.SC_TEMPORARY_REDIRECT)) {
// 读取新的 URL 地址
 Headerheader=post.getResponseHeader("location");
 if (header!=null){
   Stringnewuri=header.getValue();
   if((newuri==null)||(newuri.equals("")))
    newuri="/";
    GetMethodredirect=newGetMethod(newuri);
    client.executeMethod(redirect);
    System.out.println("Redirect:"+redirect.getStatusLine().toString());
    redirect.releaseConnection();
 }else
  System.out.println("Invalid redirect");
}

  我们可以自行编写两个JSP页面,其中一个页面用response.sendRedirect方法重定向到另外一个页面用来测试上面的例子。

  4.模拟输入用户名和口令进行登录

  本小节应该说是HTTP客户端编程中最常碰见的问题,很多网站的内容都只是对注册用户可见的,这种情况下就必须要求使用正确的用户名和口令登录成功后,方可浏览到想要的页面。因为HTTP协议是无状态的,也就是连接的有效期只限于当前请求,请求内容结束后连接就关闭了。在这种情况下为了保存用户的登录信息必须使用到Cookie机制。以JSP/Servlet为例,当浏览器请求一个JSP或者是Servlet的页面时,应用服务器会返回一个参数,名为jsessionid(因不同应用服务器而异),值是一个较长的唯一字符串的Cookie,这个字符串值也就是当前访问该站点的会话标识。浏览器在每访问该站点的其他页面时候都要带上jsessionid这样的Cookie信息,应用服务器根据读取这个会话标识来获取对应的会话信息。

  对于需要用户登录的网站,一般在用户登录成功后会将用户资料保存在服务器的会话中,这样当访问到其他的页面时候,应用服务器根据浏览器送上的Cookie中读取当前请求对应的会话标识以获得对应的会话信息,然后就可以判断用户资料是否存在于会话信息中,如果存在则允许访问页面,否则跳转到登录页面中要求用户输入帐号和口令进行登录。这就是一般使用JSP开发网站在处理用户登录的比较通用的方法。

  这样一来,对于HTTP的客户端来讲,如果要访问一个受保护的页面时就必须模拟浏览器所做的工作,首先就是请求登录页面,然后读取Cookie值;再次请求登录页面并加入登录页所需的每个参数;最后就是请求最终所需的页面。当然在除第一次请求外其他的请求都需要附带上Cookie信息以便服务器能判断当前请求是否已经通过验证。说了这么多,可是如果你使用httpclient的话,你甚至连一行代码都无需增加,你只需要先传递登录信息执行登录过程,然后直接访问想要的页面,跟访问一个普通的页面没有任何区别,因为类HttpClient已经帮你做了所有该做的事情了,太棒了!下面的例子实现了这样一个访问的过程。

/*
* Created on 2003-12-7 by Liudong
*/
  
package http.demo;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.cookie.*;
import org.apache.commons.httpclient.methods.*;
/**
* 用来演示登录表单的示例
* @author Liudong
*/
  
public class FormLoginDemo {
 static final String LOGON_SITE = "localhost" ;
 static final int   LOGON_PORT = 8080;
 public static void main(String[] args) throws Exception{
   HttpClient client = new HttpClient();
   client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);
   // 模拟登录页面 login.jsp->main.jsp
   PostMethod post = new PostMethod( "/main.jsp" );
   NameValuePair name = new NameValuePair( "name" , "ld" );
   NameValuePair pass = new NameValuePair( "password" , "ld" );
   post.setRequestBody( new NameValuePair[]{name,pass});
   int status = client.executeMethod(post);
   System.out.println(post.getResponseBodyAsString());
   post.releaseConnection();
   // 查看 cookie 信息
   CookieSpec cookiespec = CookiePolicy.getDefaultSpec();
   Cookie[] cookies = cookiespec.match(LOGON_SITE, LOGON_PORT, "/" , false , client.getState().getCookies());
   if (cookies.length == 0) {
    System.out.println( "None" );
   } else {
    for ( int i = 0; i < cookies.length; i++) {
      System.out.println(cookies[i].toString());
    }
   }
   // 访问所需的页面 main2.jsp
   GetMethodget=newGetMethod("/main2.jsp");
   client.executeMethod(get);
   System.out.println(get.getResponseBodyAsString());
   get.releaseConnection();
 }
}

  5.提交XML格式参数

  提交XML格式的参数很简单,仅仅是一个提交时候的ContentType问题,下面的例子演示从文件文件中读取XML信息并提交给服务器的过程,该过程可以用来测试Web服务。

import java.io.File;
import java.io.FileInputStream;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.EntityEnclosingMethod;
import org.apache.commons.httpclient.methods.PostMethod;
  
/**
*用来演示提交XML格式数据的例子
*/
  
public class PostXMLClient {
 public static void main(String[] args) throws Exception {
   File input = new File(“test.xml”);
   PostMethod post = new PostMethod(“http://localhost:8080/httpclient/xml.jsp”);
   // 设置请求的内容直接从文件中读取
   post.setRequestBody( new FileInputStream(input));
   if (input.length() < Integer.MAX_VALUE)
    post.setRequestContentLength(input.length());
   else
    post.setRequestContentLength(EntityEnclosingMethod.CONTENT_LENGTH_CHUNKED);
   // 指定请求内容的类型
   post.setRequestHeader( "Content-type" , "text/xml; charset=GBK" );
   HttpClient httpclient = new HttpClient();
   int result = httpclient.executeMethod(post);
   System.out.println( "Response status code: " + result);
   System.out.println( "Response body: " );
   System.out.println(post.getResponseBodyAsString());
   post.releaseConnection();
 }
}

  6.通过HTTP上传文件

  httpclient使用了单独的一个HttpMethod子类来处理文件的上传,这个类就是MultipartPostMethod,该类已经封装了文件上传的细节,我们要做的仅仅是告诉它我们要上传文件的全路径即可,下面的代码片段演示如何使用这个类。

  MultipartPostMethod filePost = new MultipartPostMethod(targetURL);

  filePost.addParameter( "fileName" , targetFilePath);

  HttpClient client = new HttpClient();

  // 由于要上传的文件可能比较大 , 因此在此设置最大的连接超时时间

  client.getHttpConnectionManager(). getParams().setConnectionTimeout(5000);

  int status = client.executeMethod(filePost);

  上面代码中,targetFilePath即为要上传的文件所在的路径。

  7.访问启用认证的页面

  我们经常会碰到这样的页面,当访问它的时候会弹出一个浏览器的对话框要求输入用户名和密码后方可,这种用户认证的方式不同于我们在前面介绍的基于表单的用户身份验证。这是HTTP的认证策略,httpclient支持三种认证方式包括:基本、摘要以及NTLM认证。其中基本认证最简单、通用但也最不安全;摘要认证是在HTTP 1.1中加入的认证方式,而NTLM则是微软公司定义的而不是通用的规范,最新版本的NTLM是比摘要认证还要安全的一种方式。

  下面例子是从httpclient的CVS服务器中下载的,它简单演示如何访问一个认证保护的页面:

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.methods.GetMethod;
public class BasicAuthenticationExample {
 public BasicAuthenticationExample() {
 }
 public static void main(String[] args) throws Exception {
   HttpClient client = new HttpClient();
   client.getState().setCredentials( "www.verisign.com" , "realm" , new UsernamePasswordCredentials( "username" , "password" ) );
   GetMethod get = new GetMethod( "https://www.verisign.com/products/index.html" );
   get.setDoAuthentication( true );
   int status = client.executeMethod( get );
   System.out.println(status+ "n" + get.getResponseBodyAsString());
   get.releaseConnection();
 }
}

  8.多线程模式下使用httpclient

  多线程同时访问httpclient,例如同时从一个站点上下载多个文件。对于同一个HttpConnection同一个时间只能有一个线程访问,为了保证多线程工作环境下不产生冲突,httpclient使用了一个多线程连接管理器的类:MultiThreadedHttpConnectionManager,要使用这个类很简单,只需要在构造HttpClient实例的时候传入即可,代码如下:

  MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();

  HttpClient client = new HttpClient(connectionManager);

  以后尽管访问client实例即可。

分享到:
评论
1 楼 george_space 2011-07-29  
顶,好文章。

相关推荐

    用HttpClient来模拟浏览器GET POST

    况且这仅仅是我们所说的顽固的WEB服务器中的一个很常见的“顽固”!再有如通过HTTP来上传文件呢?不需要头疼,这些问题有了“它”就很容易解决了! &lt;br&gt;我们不可能列举所有可能的顽固,我们会针对几种最常见的...

    HttpClient_学习整理.

    #### 五、处理顽固的Web服务器 在实际开发中,经常会遇到需要处理一些较为复杂的Web服务器的情况,例如: - **需要登录才能访问的服务**:处理登录流程和Cookie管理。 - **HTTPS加密通信**:支持安全的数据传输。 ...

    HttpClient介绍和使用文档

    在处理顽固的WEB服务器时,HttpClient展现出了其强大之处。例如,当需要访问需要用户登录或认证的页面时,HttpClient可以方便地管理COOKIE,模拟浏览器的行为。在处理文件上传的问题上,HttpClient也提供了便捷的...

    HttpClient3.1 学习整理

    这个库在处理复杂的HTTP请求、响应以及管理Cookie、文件上传等任务时提供了强大的功能,使得开发者能够更加便捷地应对各种顽固的WEB服务器。 在处理需要登录和认证的网页时,HttpClient3.1 提供了支持。它允许你在...

    野生动物与家畜多目标检测数据集.zip

    数据集介绍:野生动物与家畜多目标检测数据集 数据集名称:野生动物与家畜多目标检测数据集 数据规模: - 训练集:1,540张图片 - 验证集:377张图片 - 测试集:316张图片 分类类别: Brown-bear(棕熊)、Chicken(鸡)、Fox(狐狸)、Hedgehog(刺猬)、Horse(马)、Mouse(老鼠)、Sheep(绵羊)、Snake(蛇)、Turtle(龟)、Rabbit(兔)及通用object(物体)共11个类别 标注格式: YOLO格式标注,包含归一化坐标与类别索引,支持目标检测模型训练 数据特性: 涵盖航拍与地面视角,包含动物个体及群体场景,适用于复杂环境下的多目标识别 农业智能化管理: 通过检测家畜(鸡/马/绵羊等)数量及活动状态,辅助畜牧场自动化管理 生态监测系统: 支持野生动物(棕熊/狐狸/刺猬等)识别与追踪,用于自然保护区生物多样性研究 智能安防应用: 检测农场周边危险动物(蛇/狐狸),构建入侵预警系统 动物行为研究: 提供多物种共存场景数据,支持动物群体交互行为分析 高实用性标注体系: - 精细标注包含动物完整轮廓的边界框 - 特别区分野生动物与家畜类别,支持跨场景迁移学习 多维度覆盖: - 包含昼间/复杂背景/遮挡场景 - 涵盖陆地常见中小型动物与禽类 - 提供通用object类别适配扩展需求 工程适配性强: - 原生YOLO格式适配主流检测框架(YOLOv5/v7/v8等) - 验证集与测试集比例科学,支持可靠模型评估 生态价值突出: - 同步覆盖濒危物种(龟类)与常见物种 - 支持生物多样性保护与农业生产的双重应用场景

    语音识别功能:Vue3+WebSpeechAPI整合教程.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Vue 3是一款备受瞩目的JavaScript框架,它采用了基于Proxy的响应式系统,显著提升了性能和调试能力。其Composition API带来了更高效的逻辑组织方式,使代码复用变得轻而易举。Tree-shaking支持让打包后的文件体积更小,进一步优化了应用性能。Vue 3还与TypeScript深度集成,提供了更完善的类型推导,让开发过程更加顺畅。无论是构建大型应用还是小型项目,Vue 3都能凭借其出色的性能和灵活的架构,帮助开发者高效完成任务,是现代Web开发的理想选择。

    低代码平台开发:Vue3可视化拖拽的架构设计.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Vue 3是一款备受瞩目的JavaScript框架,它采用了基于Proxy的响应式系统,显著提升了性能和调试能力。其Composition API带来了更高效的逻辑组织方式,使代码复用变得轻而易举。Tree-shaking支持让打包后的文件体积更小,进一步优化了应用性能。Vue 3还与TypeScript深度集成,提供了更完善的类型推导,让开发过程更加顺畅。无论是构建大型应用还是小型项目,Vue 3都能凭借其出色的性能和灵活的架构,帮助开发者高效完成任务,是现代Web开发的理想选择。

    CSDN博客之星:技术分享盛宴助力交流与个人品牌成长

    文案: “CSDN博客之星”是技术博主展现实力与成长的顶级舞台!通过参与这一品牌活动,你不仅能提升个人影响力,还能链接行业精英,加速技术精进。本文揭秘往届获奖者的成功经验,分享高流量博客的创作技巧——从原创内容到粉丝互动,助你打造优质技术品牌,赢得更多机遇。无论你是新人还是资深博主,这里都是突破自我的起点!

    柴油–天然气–氢气三燃料化学反应机理研究.zip

    柴油–天然气–氢气三燃料化学反应机理研究.zip

    机器学习Python 实现TSO-ELM金枪鱼群优化算法优化极限学习机多输入单输出回归预测的详细项目实例(含模型描述及示例代码)

    内容概要:本文档详细介绍了Python实现TSO-ELM(金枪鱼群优化算法优化极限学习机)多输入单输出回归预测的项目实例。极限学习机(ELM)作为一种快速训练的前馈神经网络算法,虽然具有训练速度快、计算简单等优点,但也存在局部最优解和参数敏感性的问题。金枪鱼群优化算法(TSO)通过模拟金枪鱼群体觅食行为,具有较强的全局搜索能力。将TSO与ELM结合形成的TSO-ELM模型,可以优化ELM的输入层和隐藏层之间的权重,提高回归预测的准确性。项目包括数据预处理、TSO优化、ELM回归模型训练和预测输出四个主要步骤,并提供了详细的代码示例。; 适合人群:对机器学习、优化算法有一定了解的数据科学家、算法工程师和研究人员,特别是那些希望深入理解智能优化算法在回归预测任务中的应用的人群。; 使用场景及目标:① 提升ELM在多输入单输出回归预测中的性能,特别是在处理非线性问题时的预测精度;② 解决ELM中的局部最优解和参数敏感性问题;③ 优化ELM的隐层权重和偏置值,提高模型的表达能力和预测能力;④ 在金融、气象、能源、医疗、交通等领域提供更准确的预测模型。; 阅读建议:本文档不仅提供了理论解释,还包含详细的代码实现,建议读者在阅读过程中结合代码进行实践,理解TSO-ELM模型的工作原理,并尝试调整参数以优化预测效果。同时,读者应关注TSO算法在高维复杂问题中的应用挑战,思考如何改进优化策略。

    Vue3+Webjs:去中心化应用开发全指南.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Vue 3是一款备受瞩目的JavaScript框架,它采用了基于Proxy的响应式系统,显著提升了性能和调试能力。其Composition API带来了更高效的逻辑组织方式,使代码复用变得轻而易举。Tree-shaking支持让打包后的文件体积更小,进一步优化了应用性能。Vue 3还与TypeScript深度集成,提供了更完善的类型推导,让开发过程更加顺畅。无论是构建大型应用还是小型项目,Vue 3都能凭借其出色的性能和灵活的架构,帮助开发者高效完成任务,是现代Web开发的理想选择。

    服务端渲染进阶:Vue3SSR+Nuxt3性能优化全攻略.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Vue 3是一款备受瞩目的JavaScript框架,它采用了基于Proxy的响应式系统,显著提升了性能和调试能力。其Composition API带来了更高效的逻辑组织方式,使代码复用变得轻而易举。Tree-shaking支持让打包后的文件体积更小,进一步优化了应用性能。Vue 3还与TypeScript深度集成,提供了更完善的类型推导,让开发过程更加顺畅。无论是构建大型应用还是小型项目,Vue 3都能凭借其出色的性能和灵活的架构,帮助开发者高效完成任务,是现代Web开发的理想选择。

    10分钟掌握Vue3响应式系统:Proxy与Ref的深度对比.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Vue 3是一款备受瞩目的JavaScript框架,它采用了基于Proxy的响应式系统,显著提升了性能和调试能力。其Composition API带来了更高效的逻辑组织方式,使代码复用变得轻而易举。Tree-shaking支持让打包后的文件体积更小,进一步优化了应用性能。Vue 3还与TypeScript深度集成,提供了更完善的类型推导,让开发过程更加顺畅。无论是构建大型应用还是小型项目,Vue 3都能凭借其出色的性能和灵活的架构,帮助开发者高效完成任务,是现代Web开发的理想选择。

    交互式地图开发实战指南

    本书《Map Scripting 101》由Adam DuVander撰写,旨在为刚接触地图脚本开发的网页开发者提供实用的指导。书中介绍了如何使用Bing、Yahoo!和Google地图提供的API,通过73个示例脚本,教授读者如何构建交互式地图和混合应用。读者将学习如何创建基本地图、嵌入地图、设置缩放级别和边界、显示和过滤位置标记及信息气泡、根据访客位置定制地图、使用KML、GeoRSS和GPX等常见数据格式,以及在地图上创建图形覆盖层以更好地分析数据和趋势。此外,书中还指导如何利用Yelp、Upcoming等网站的公开地理数据以及美国政府的公共领域地理数据。本书适合任何想要开始进行地图脚本开发的网页开发者,无论你的兴趣是追踪全球地震还是仅仅标记都伯克的咖啡馆。

    【车辆控制】基于matlab遗传算法GA优化自适应PID自动驾驶汽车速度控制(LPV MPC)【含Matlab源码 13317期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    Python脚本大全.zip

    Python脚本大全资源描述 资源概述 Python脚本大全是一个集合了多种实用Python脚本的资源包,旨在为开发者和爱好者提供一系列可以直接使用或作为学习参考的代码示例。这些脚本涵盖了从基础到高级的多种应用场景,包括数据处理、自动化任务、网络爬虫、数据分析、机器学习等。通过这些脚本,用户可以快速实现常见的编程任务,提高开发效率,同时也可以作为学习Python语言和相关技术的实践材料。 资源内容 1. **基础脚本**: - 文件操作:读取、写入、复制、移动文件和文件夹。 - 数据处理:处理CSV、JSON、Excel等常见数据格式。 - 系统工具:获取系统信息、执行系统命令、管理进程等。 2. **网络爬虫**: - 简单爬虫:抓取网页内容、提取特定数据。 - 数据抓取:从API获取数据、解析HTML和XML。 - 高级爬虫:使用Selenium、Scrapy等框架实现复杂爬虫任务。 3. **数据分析与可视化**: - 数据分析:使用Pandas、NumPy等库进行数据清洗、分析。 - 数据可视化:使用Matplotlib、Seaborn等库绘制图表。 - 数据报告:生成HTML、PDF等格式的报告。 4. **机器学习**: - 机器学习基础:线性回归、逻辑回归、决策树等。 - 深度学习:使用TensorFlow、Keras等框架实现神经网络。 - 实用案例:图像识别、自然语言处理、时间序列分析等。 5. **自动化任务**: - 定时任务:使用schedule、APScheduler等库实现定时任务。 - 批处理:批量处理文件、执行批量任务。 - GUI自动化:使用PyAutoGUI等库实现图形界面自动化操作。 6. **实用工具** 日志记录:使用logging模块记录日志

    【Three.js基础学习】36.particles-morphing-shader

    实现粒子运动切换效果 着色器的应用

    基于Matlab Simulink的四旋翼无人机GUI界面模拟仿真:飞行参数调整与动画展示

    内容概要:本文介绍了基于Matlab Simulink平台搭建的四旋翼无人机模拟系统,该系统拥有图形化用户界面(GUI),允许用户自定义无人机的各项参数并进行飞行模拟。用户可以通过修改如机臂长度、电机推力系数等关键参数,直观地观察到这些变化对飞行状态的影响。此外,文中还详细描述了仿真实验的具体操作流程以及一些有趣的实验现象,如改变参数导致的不同飞行轨迹和姿态表现。同时提到了内置的3D引擎用于生成逼真的飞行动画,特别是螺旋桨旋转效果的真实再现。 适合人群:对无人机控制系统感兴趣的研究人员和技术爱好者,尤其是那些希望通过模拟环境深入理解无人机动力学特性和控制机制的人群。 使用场景及目标:适用于教学演示、科研探索或者个人兴趣爱好等领域。主要目的是帮助使用者掌握无人机的基本工作原理,熟悉各种物理参数的作用及其相互关系,提高对于复杂系统的认知水平。 其他说明:文中提到的一些高级特性,如实时调参、故障注入等功能增加了系统的趣味性和实用性,为用户提供了一个更加全面的学习体验。

    语音合成方案:Vue3+WebSpeechAPI实现.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Vue 3是一款备受瞩目的JavaScript框架,它采用了基于Proxy的响应式系统,显著提升了性能和调试能力。其Composition API带来了更高效的逻辑组织方式,使代码复用变得轻而易举。Tree-shaking支持让打包后的文件体积更小,进一步优化了应用性能。Vue 3还与TypeScript深度集成,提供了更完善的类型推导,让开发过程更加顺畅。无论是构建大型应用还是小型项目,Vue 3都能凭借其出色的性能和灵活的架构,帮助开发者高效完成任务,是现代Web开发的理想选择。

    分类 (Classication):测试你的知识.pdf

    分类、阈值、混淆矩阵、准确率、召回率、精确率等教程和代码

Global site tag (gtag.js) - Google Analytics