java的requestmapping_SpringMVC RequestMapping 详解

SpringMVC RequestMapping 详解

RequestMapping这个注解在SpringMVC扮演着非常重要的角色,可以说是随处可见。它的知识点很简单。今天我们就一起学习SpringMVC的RequestMapping这个注解。文章主要分为两个部分:RequestMapping 基础用法和RequestMapping 提升用法。

准备工作

pom.xml 这里是需要的jar包和相关的配置。这里设置了maven-compiler-plugin的java版本为1.7,避免打包出错和中文乱码的问题。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.springmvc

springmvc

0.0.1-SNAPSHOT

war

maven-compiler-plugin

1.7

1.7

UTF-8

4.1.3.RELEASE

org.springframework

spring-webmvc

${spring.version}

org.springframework

spring-context

${spring.version}

org.springframework

spring-aop

${spring.version}

org.springframework

spring-core

${spring.version}

org.springframework

spring-web

${spring.version}

javax.servlet

javax.servlet-api

4.0.0

provided

web.xml 设置字符拦截器,避免中文乱码

xmlns="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

id="WebApp_ID" version="3.0">

springmvc

dispatcher

org.springframework.web.servlet.DispatcherServlet

1

dispatcher

/

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

forceEncoding

true

encodingFilter

/*

SpringMVC的配置文件(dispatcher-servlet.xml)没有变,这里就不再贴出来了。可以去上一章找

RequestMapping 基础用法

核心类 ApiStudyController,这是重点需要看的java文件。里面主要介绍了@RequestMapping 的基础用法。

你需要重点学习的有: 获取请求参数值的@RequestParam注解;通过占位符获取参数值的@PathVariable注解;指定请求方式的method属性;用于将数据存储到作用域中返回给前端的Map,Model和ModelMap参数;以及如何使用POJO对象作为方法的参数。

import java.util.Map;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.CookieValue;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestHeader;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

@Controller

@RequestMapping("apiStudy")

public class ApiStudyController {

private static final String SUCCESS = "apistudy";

private static final String RESULT_KEY = "result";

/**

* 常用知识点:在类或者方法上使用 @RequestMapping 注解

* 若没有修饰类,则访问路径是: http://ip:port/项目名/方法的@RequestMapping值

* 若类有修饰类,则访问路径是: http://ip:port/项目名/类的@RequestMapping值/方法的@RequestMapping值

*/

/**

* 方法中用map作为参数,可以将数据存储到request作用域中,放回到页面上。

* 同样用法的有 Model 类型 和 ModelMap 类型

*/

@RequestMapping("/testMapResult")

public String testMapResult(Map map, Model model, ModelMap modelMap){

String apiDocs = "Map,Model,ModelMap (常用方法) : 在方法中添加Map的参数,可以将数据放到request 作用域中!";

map.put(RESULT_KEY, apiDocs);

model.addAttribute("model", "Model");

modelMap.addAttribute("modelMap", "ModelMap");

return SUCCESS;

}

/**

* 常用知识点:使用 method 属性来指定请求方式

* 若用GET方式请求,会提示:HTTP Status 405 - Request method 'GET' not supported 错误信息

*/

@RequestMapping(value = "/testRequestMethod", method=RequestMethod.POST)

public String testRequestMethod(Map map) {

String apiDocs = "RequestMethod (常用方法) : 若设置只有POST请求才能进入,则用GET方式请求,会报405的错误。反之亦然!";

map.put(RESULT_KEY, apiDocs);

return SUCCESS;

}

/**

* 常用知识点:使用注解 @PathVariable 映射 URL绑定占位,属于REST风格。

* 注意两点:

* 1. 严格用法: @PathVariable("arg") String arg; 前一个arg参数,必须要和占位参数{arg}保持一致。后面一个arg参数可以自定义。

* 2. 偷懒用法: @PathVariable String arg; 这里的参数名 arg 必须要和占位参数{arg}保持一致,不然会提示400的错误

*/

@RequestMapping("/testPathVariable/{arg}")

public String testPathVariable(@PathVariable("arg") String arg, Map map) {

String apiDocs = "PathVariable (常用方法) : 通过映射 URL绑定占位获取的值是 " + arg;

map.put(RESULT_KEY, apiDocs);

return SUCCESS;

}

/**

* 常用知识点:使用注解 @RequestParam 来映射请求参数

* 该注解有三个参数,

* value 请求的参数名,

* required 请求的参数是否必填 ,默认是true,

* defaultValue 请求的参数默认值.

* 参数的类型建议是封装数据类型,因为float默认值是0.0 ,若该参数是非必填,则会报错 HTTP Status 500

*/

@RequestMapping("/testRequestParam")

public String testRequestParam(@RequestParam("account") String account,

@RequestParam(value="password", required=true) String password,

@RequestParam(value="price", required=false, defaultValue="0.0") float price,

Map map) {

String apiDocs = "RequestParam (常用方法) : 获取映射请求参数的值有 account : " + account + " password : " + password + " price : " + price;

map.put(RESULT_KEY, apiDocs);

return SUCCESS;

}

/**

* 常用知识点:方法参数是POJO对象

* 前端的请求参数名一定要和POJO对象属性一致。支持级联

*/

@RequestMapping(value = "/testPojo", method = RequestMethod.POST)

public String testPojo(User user, Map map) {

map.put(RESULT_KEY, user);

return SUCCESS;

}

/**

* 不常用方法:params 和 headers

* @RequestMapping 注解中,除了常用的value和method外,还有两个较为常用的params和headers

* 他们可以是请求跟精确,制定那些参数的请求不接受,同时也可以指定那些参数的请求接收。

* params={param1,param2}

* param1 表示 请求必须包含名为param1的请求参数

* !param1 表示 请求不能包含名为param1的请求参数

* param1!=value1 表示请求包含param1的请求参数,但是其值不能是value1

*/

@RequestMapping(value="/testParamsAndHeaders", params={"itdragon"},

headers = { "Accept-Language=zh-CN,zh;q=0.8" })

public String testParamsAndHeaders(Map map) {

String apiDocs = "params,headers (了解用法) : 这里表示当请求参数中包含了itdragon的时候才能进来";

map.put(RESULT_KEY, apiDocs);

return SUCCESS;

}

/**

* 不常用方法:ant风格

* ?匹文件名中一个字

* *匹文件名中任意字

* ** 匹多 层径

*/

@RequestMapping("/*/testAntUrl")

public String testAntUrl(Map map) {

String apiDocs = "Ant风格 (了解用法) : ?匹文件名中一个字 ; *匹文件名中任意字 ; ** 匹多 层径 ";

map.put(RESULT_KEY, apiDocs);

return SUCCESS;

}

/**

* 不常用方法:@RequestHeader 注解获取请求头数据。

*/

@RequestMapping("/testRequestHeader")

public String testRequestHeader(@RequestHeader(value = "Accept-Language") String al,

Map map) {

String apiDocs = "@RequestHeader (了解用法) : 获取请求头数据的注解, 如Accept-Language 的值是 : " + al;

map.put(RESULT_KEY, apiDocs);

return SUCCESS;

}

/**

* 不常用方法:@CookieValue: 映射一个 Cookie值

*/

@RequestMapping("/testCookieValue")

public String testCookieValue(@CookieValue("JSESSIONID") String sessionId,

Map map) {

String apiDocs = "@CookieValue(了解用法) : 映射一个 Cookie值的注解, 如JSESSIONID 的Cookie值是 : " + sessionId;

map.put(RESULT_KEY, apiDocs);

return SUCCESS;

}

}

用于测试的前端页面 index.jsp

pageEncoding="UTF-8"%>

SpringMVC 快速入门

@RequestMapping 注解基本用法

史上最丑的HelloWorld

Map,Model,ModelMap的使用方法

用GET请求方式测试POST方法

@PathVariable获取占位数据

@RequestParam获取请求参数值

account:

level:

salary:


params 和 headers用法

Ant风格URL请求

@RequestHeader 注解获取请求头数据

@CookieValue 注解获取 Cookie值

方便查看结果的apistudy.jsp页面

pageEncoding="UTF-8"%>

SpringMVC 快速入门

@RequestMapping 注解基本用法

request 作用域 :

${requestScope.result}

${requestScope.model}

${requestScope.modelMap}


session 作用域 :

${sessionScope.result}

最后是两个用于测试的POJO对象,分别是User和Position

public class User {

private Integer id;

private String account;

private String password;

private Position position;

public User() {

}

public User(Integer id, String account, String password) {

this.id = id;

this.account = account;

this.password = password;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getAccount() {

return account;

}

public void setAccount(String account) {

this.account = account;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public Position getPosition() {

return position;

}

public void setPosition(Position position) {

this.position = position;

}

@Override

public String toString() {

return "User [id=" + id + ", account=" + account + ", password=" + password + ", position="

+ position + "]";

}

}

public class Position {

private Integer id;

private String level;

private Double salary;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getLevel() {

return level;

}

public void setLevel(String level) {

this.level = level;

}

public Double getSalary() {

return salary;

}

public void setSalary(Double salary) {

this.salary = salary;

}

@Override

public String toString() {

return "Position [level=" + level + ", salary=" + salary

+ "]";

}

}

测试的效果图

bVXbbu?w=1049&h=614

RequestMapping 提升用法

这里的知识点有:输出模型数据 ModelAndView类型,Map(Model,ModelMap),@ModelAttribute注解,@SessionAttributes注解的使用,和 原生的Servlet Api的使用。

ModelAndView数据类型:见名知意,即包含了模型数据,又包含了视图数据。设置模型数据有两种方式:modelAndView.addObject(String attributeName, Object attributeValue) 方分别表示Key和Value。modelAndView.addAllObjects(modelMap) 存的参数是一个Map(Model,ModelMap其实都是Map数据类型)。

设置视图数据常用方法也有两种方式:

ModelAndView modelAndView = new ModelAndView(viewName) 初始化ModelAndView的时候设置。

modelAndView.setViewName(viewName) 初始化后再she'zh

@ModelAttribute 注解:被该注解修饰的方法, 会在每个目标方法执行之前被 SpringMVC 调用。实际开发中其实用的并不是很多。在我们更新数据的时候,一般都会先查询,后更新。该注解就扮演督促查询的角色,在执行更新的方法前先执行该注解修饰的查询数据方法。

@SessionAttributes 注解:只能修饰在类上,将模型数据暂存到HttpSession中,从而使多个请求的数据共享。常用方法有@SessionAttributes(value={"obj1", "obj2"}, types={String.class, Obj1.class})。表示可以将数据类型是String或者是对象Obj1的模型数据放到HttpSession中。也可以将变量名是obj1,obj2的模型数据放到HttpSession中。用这个注解容易出一个问题。HttpSessionRequiredException 异常,原因在代码注释中。

原生的Servlet Api:如果发现不能引入javax.servlet.* 的文件,可能是因为项目里面中没有servlet-api.jar。

普通项目解决方法:右击项目工程名称 ---> Build Path ---> Configure Build Path... ---> 选择 Libraries 点击 Add External JARS ---> 在按照tomcat的里面下,找到lib目录,里面就有。

Maven项目解决方法:如果按照上面的方法处理,虽然引入文件,当打包的时候会提示"找不到符号",是因为servlet-api.jar 没有真正的加入到classpath下。最简单的方法就是在pom.xml加入servlet-api.jar。

看代码:

import java.io.IOException;

import java.io.Writer;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.SessionAttributes;

import org.springframework.web.servlet.ModelAndView;

@Controller

@RequestMapping("apiStudy")

@SessionAttributes(value={"user"}, types={String.class})

public class ApiStudyController {

private static final String SUCCESS = "apistudy";

private static final String RESULT_KEY = "result";

/**

* @SessionAttributes 将数据存储到session中,达到多个请求数据共享的目的。

* 只能修饰在类上的注解

* 通过属性名value,指定需要放到会话中的属性

* 通过模型属性的对象类型types,指定哪些模型属性需要放到会话中

*/

/**

* 常用方法:ModelAndView 方法的返回值设置为 ModelAndView 类型。

* ModelAndView 顾名思义,是包含视图和模型信息的类型。

* 其数据存放在 request 域对象中.

*/

@RequestMapping("/testModelAndView")

public ModelAndView testModelAndView() {

String viewName = SUCCESS; // 需要返回的视图名

String apiDocs = "ModelAndView(常用方法) : 之前学习的方法返回值是字符串,数据是通过Map返回到前端。现在可以通过ModelAndView类型直接完成。";

ModelAndView modelAndView = new ModelAndView(viewName);

modelAndView.addObject(RESULT_KEY, apiDocs); // 添加数据到model中

return modelAndView;

}

/**

* SpringMVC 确定目标方法 POJO 类型入参的过程

* 第一步: 确定一个 key

* 若方法形如 "testModelAttribute(User user)" , 则key为 user(POJO 类名第一个字母小写)

* 若方法形如"testModelAttribute(@ModelAttribute("userObj") User user)" ,则key为 userObj

* 第二步: 在 implicitModel 中查找 key 对应的对象

* 若 implicitModel 存在, 则作为入参传入

* 若 implicitModel 中不存在, 则检查当前Handler 是否使用 @SessionAttributes 注解

* 若使用了该注解, 且 @SessionAttributes 注解的 value 属性值中包含了 key, 则会从 HttpSession 中来获取 key 所对应的 value 值, 若存在则直接传入到目标方法的入参中. 若不存在则将抛出异常.

* 若 Handler 没有标识 @SessionAttributes 注解或 @SessionAttributes 注解的 value 值中不包含 key, 则通过反射来创建 POJO 类型的参数, 传入为目标方法的参数

* implicitModel? SpringMVC 会把 key 和 POJO 类型的对象保存到 implicitModel 中, 进而会保存到 request 中.

*/

@RequestMapping("/testModelAttribute")

public ModelAndView testModelAttribute(User user){

ModelAndView modelAndView = new ModelAndView(SUCCESS);

modelAndView.addObject(RESULT_KEY, "update : " + user); // 添加数据到model中

return modelAndView;

}

/**

* 常用方法:@ModelAttribute 修饰方法。 被该注解修饰的方法, 会在每个目标方法执行之前被 SpringMVC 调用

* 运行流程:

* 第一步: 在执行 testModelAttribute(User user) 方法前,会先执行被@ModelAttribute 注解修饰的方法 getUser()

* 第二步: 执行getUser() 后,将执行放入到Map中,其中的key 必须和目标方法User对象的首字母小写user

* 第三步: SpringMVC 从 Map 中取出 User 对象,然后把对象传入目标方法的参数.

*

* 未使用 @ModelAttribute testModelAttribute方法 打印的信息 :

* update : User [id=1, account=itdragon, password=null, position=null]

* 使用@ModelAttribute testModelAttribute方法 打印的信息 :

* update : User [id=1, account=itdragon, password=zhangdeshuai, position=null]

*/

@ModelAttribute

public void getUser(@RequestParam(value="id",required=false) Integer id,

Map map){

if(id != null){

//模拟从数据库中获取对象

User user = new User(1, "itdragon", "zhangdeshuai");

map.put("user", user); // 这里的key 一定是该对象User的首字母小写user

}

}

/**

* 常用方法:可以使用 Serlvet 原生的 API 作为目标方法的参数 具体支持以下类型

*

* HttpServletRequest

* HttpServletResponse

* HttpSession

* InputStream

* OutputStream

* Reader

* Writer

*/

@RequestMapping("/testServletAPI")

public void testServletAPI(HttpServletRequest request,

HttpServletResponse response, Writer out) throws IOException {

response.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");

out.write("Hello Servlet API,和用Servlet一样(0——0) ;
request : " + request + " ;
response : " + response);

}

}

一样的前端index.jsp

pageEncoding="UTF-8"%>

SpringMVC 快速入门

@RequestMapping 注解提升用法

ModelAndView的使用方法

account:

使用原生的Servlet API

两个实体类和查看结果的jsp页面没有变

效果图:

1c2e52c30bb8c56bfb63d13ba5f43849.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis查询所有key命令_想在生产搞事情?那试试这些 Redis 命令

作者:鸭血粉丝出自:Java极客技术原文:mp.weixin.qq.com/s/WeAamgYYGQfxlsppsn9_lg哎,最近阿粉又双叒叕犯事了。事情是这样的,前一段时间阿粉公司生产交易偶发报错,一番排查下来最终原因是因为 Redis 命令执…

mysql gui 分区_一文彻底搞懂MySQL分区

一.InnoDB逻辑存储结构首先要先介绍一下InnoDB逻辑存储结构和区的概念,它的所有数据都被逻辑地存放在表空间,表空间又由段,区,页组成。段段就是上图的segment区域,常见的段有数据段、索引段、回滚段等,在In…

js 获取域名_RapidDNS域名查询如何联动Goby

前言:http://RapidDNS.io 是一个秒级在线子域名和同IP域名的查询工具。目前拥有25亿条DNS记录,支持A、AAAA、CNAME、MX4种DNS记录类型。由于Goby程序对子域名收集方面不是很完善,这里特编写此插件作为其拓展。可以方便快速获取域名和ip地址信…

iOS 9应用开发教程之iOS 9新特性

iOS 9应用开发教程之iOS 9新特性 iOS 9开发概述 iOS 9是目前苹果公司用于苹果手机和苹果平板电脑的最新的操作系统。该操作系统于2015年6月8号(美国时间)被发布。本章将主要讲解iOS 9的新特性、以及使用Xcode 7.0如何编写一个简单的iOS 9的应用程序等内容…

kafka创建topic命令_0748-5.14.4-Kafka的扩容和缩容

​文档编写目的在Kafka集群资源使用已超出系统配置的资源时,或者有大量资源闲置造成资源浪费的时候,需要分别通过扩容Kafka和缩容Kafka来进行调整。本篇文章Fayson主要介绍如何进行Kafka的扩容和缩容,以及变更后的Kafka集群如何进行负载均衡的…

java 对话框 显示图片_Java对话框上显示图片

手掌心其实有很多种方法可以解决图片显示大小的问题:使用photoshop修改. 优点是可以节省系统资源, 显示图片的时候,不用做处理,缺点是需要了解ps的基本操作使用JDialog 自定义对话框. 优点 可以实现复杂的效果, 缺点,代码量比较多使用ImageIcon, Image 类 实现图片的缩放,. 优点…

class-dump获取iOS私有api

转自:http://blog.csdn.net/sunyuanyang625/article/details/41440167 获取各类iOS私有api 安装工具class-dump 资源地址http://download.csdn.net/detail/map625/8191343 运行class-dump并编译src项目 编译之后在produce中找到编译好的class…

火星云分发全网视频_好用的短视频一键分发软件,让工作效率提高10倍

随着近几年新媒体行业的高速发展,新媒体行业的红利也越来越来,也有越来越多的人想要享受到这波红利,于是不管是个人是企业都纷纷开始进入这个市场。不过也随之诞生了一系列麻烦繁琐的问题,如怎么持续创作内容,怎么花费…

java 采样_Java编程实现beta分布的采样或抽样实例代码

本文研究的主要是Java编程实现beta分布的采样或抽样,具体如下。本文将使用math3提供的工具包,对beta分布进行采样。如下程序是对alpha81,beta219的beta分布函数,进行抽样,共采样10000次。package function;/*** author…

树莓派 蓝牙音响_你应该拥有一个树莓派

为什么你应该拥有一个树莓派树莓派并不是极客的玩具树莓派可以用来做什么?它能实现的实在是太多了,最常见的比如自动化脚本 各种机器人bot: QQ/wechat/微博/facebook/telegram,IM结合爬虫 telegram的bot如今被黑产们结合比特币,做成了交易系统 使用宝塔linux面板,一键安装word…

训练集的识别率一直波动_机器学习验证集为什么不再有新意?

机器学习中,一般将样本数据分成独立的三部分:训练集、验证集和测试集。其中验证集在机器学习中所起到的作用是:开发模型总需要调节模型的参数,而整个调节过程需要在验证集数据上运行训练的模型,从而给出其表现的反馈信…

java写一个web聊天工具_javaweb写的在线聊天应用

写这个玩意儿就是想练练手, 用户需要登陆才能在线聊天,不要依赖数据库, 不需要数据库的操作, 所有的数据都是保存在内存中, 如果服务器一旦重启,数据就没有了;登录界面:聊天界面&…

人物角色群体攻击判定(一)

我们制作3D动作游戏的时候,常常主人公是一对多人进行攻击,或者敌人在角色前方一定范围内进行攻击. 我们怎么实现这种效果呢? 1. 使用触发器(多体攻击)方便调试,可视化(推荐)2. 运用点乘和叉乘,判断敌人的角度和位置(单,多)一般3. 使用Physics的Physics.OverlapSpher…

mfc cimage加载显示图片_在微信小程序里实现图片预加载组件

网页中的图片预加载我们知道在 Web 页面中实现图片的预加载其实很简单,通常的做法是在 JS 中使用 Image 对象即可,代码大致如下var image new Image() image.onload function() {console.log(图片加载完成) } image.src"//misc.360buyimg.com/lib…

HDU 2242 双连通分量 考研路茫茫——空调教室

思路就是求边双连通分量&#xff0c;然后缩点&#xff0c;再用树形DP搞一下。 代码和求强连通很类似&#xff0c;有点神奇&#xff0c;_&#xff0c;慢慢消化吧 1 #include <cstdio>2 #include <cstring>3 #include <algorithm>4 #include <vector>5 #…

java注册中心nacos_spring-cloud整合nacos做注册中心

前面讲了spring-cloud整合nacos做配置中心&#xff0c;这节讲一下nacos做注册中心至于注册中心是什么&#xff0c;我就不讲了&#xff0c;不了解的可以去问度娘下面我就直接开始了&#xff0c;也是比较简单的&#xff1a;1.引入依赖1.8Greenwich.SR12.1.0.RELEASEorg.springfra…

Android基于mAppWidget实现手绘地图(二)--概要

离线地图是一张被切成类似瓷砖般格子图像组成&#xff0c;这些被切开的格子组织成多个缩放级别。缩放级别是从0开始。0这个缩放级别&#xff0c;地图图像的尺寸为1*1像素。在每下一个缩放级别&#xff0c;图像尺寸则会两倍递增。 每个地图都是有层和地图对象的。 层是一个抽象的…

java实体字节属性定义_Java字节码方法表与属性表详解

而这些字节其实对应的信息是它&#xff1a;所以问题就来了&#xff0c;aload_0不是助记符信息么&#xff0c;怎么就能够跟字节码文件中的字节对应上呢&#xff1f;所谓助记符其实也就是帮忙我们去记忆的符合&#xff0c;在底层其实也是对应的一个个十六进制的数字的&#xff0c…

允许使用抽象类类型 isearchboxinfo 的对象_此对象非彼对象(面向对象)3

java13面向对象深入3大纲这里没有写面向对象-封装性理解封装( encapsulation)怎么去理解&#xff0c;一台电脑利用一个外壳包裹&#xff0c;保护了里面的电器元件&#xff0c;提供了少量的按键与其对接使用。我要看电视&#xff0c;只需要按一下开关和换台就可以了。有必要了解…

复制url直接能跳过验证_python 爬虫如何突破登录验证

我用 python 做爬虫爬过不少数据&#xff0c;比如在 google play 爬应用信息&#xff1b;在 instragram, 500px 爬图片&#xff1b;当然爬虫的作用不止于此&#xff0c;比如定时去某个网站签到&#xff0c;妈妈再也不用担心我忘记签到了这些网站支持游客访问&#xff0c;但要访…