前台直接访问 和 使用java模拟http请求 有什么不一样的地方吗?

使用 浏览器直接访问 和java模拟http请求访问返回的数据不同,
两者有什么区别?

浏览器直接访问的话属于get请求,如果是完全模拟浏览器的所有参数的话,返回应该是一样的。

浏览器直接访问的话属于get请求,headers的类型是form-data,编码格式是默认的,你用java模拟http请求的时候可能设置了这些属性,或者就算没有设置,可能你的环境默认值和浏览器的不一样,
如果是完全模拟浏览器的所有参数的话,返回应该是一样的

浏览器直接访问的话属于get请求

到这里为止,我们一直忽略了 HTTP 请求和 HTTPS 请求之间的差异,因为大多数情况下,我们确实不需要关心 URL 是 HTTP 的还是 HTTPS 的,上面给出的代码也都能很好的自动处理这两种不同类型的请求。

但是,我们还是应该注意下这两种请求的差异,后面我们在介绍 HTTP 代理时将会特别看到这两者之间的差异。另外还有一点,在调用URL 的 openConnection() 方法时,如果 URL 是 HTTP 协议的,返回的是一个 HttpURLConnection 对象,而如果 URL 是 HTTPS 协议的,返回的将是一个 HttpsURLConnection 对象。

代码方式可以实现http的所有功能,浏览器就很局限了

后台模拟http请求,需要自己将请求格式满足http协议报文格式,例如需要自己在请求中放入HOST、Content-Length、content-type等,而前端浏览器会自动封装完成的

后台模拟http请求,需要自己将请求格式满足http协议报文格式,例如需要自己在请求中放入HOST、Content-Length、content-type等,而前端浏览器会自动封装

浏览器的头会不断变化, 所以后台模拟的时候需要一些变化, 不然容易被封号

直接前台访问,浏览器会自动帮你补全地址,例如你输入www.baidu.com,浏览器会自动补全http://www.baidu.com。
另外前台访问的时候会把同一次sessionId传回去给服务器,后台访问的话每一次请求sessionId都是不一样的。
前台访问会自动填写http头部信息,例如楼上说的一些host、content-Length等等等,但是java模拟的话,http的很多头部信息都是需要自己补全的,目前就会有一些网站的反爬会判断你http的头部是否正确来控制能否访问。
直接前台访问,浏览器会解析返回的文件,例如你是js文件,那么就会执行js的结果进行访问,但是你用java模拟,只能得到的是文件的内容。

本质上差不多,但是后台访问可以实现POST访问,并且对请求头等可定制化性更强

最后GET回的结果是一样的

post请求比前台的get请求更安全

从结果上没有什么区别,用java模拟http请求其实就是和浏览器访问一样

后台访问一般只直接端口POST访问,基本上不会被拒绝,但是前台有些访问会被服务器主动拒绝;然后前台访问的话会有自动补全操作,但是后台访问都是自己填写,如果写错一个地址或者POST地址都会导致不能进行访问