1. android servrice里能进行网络请求吗
可以的,只是建议发请求的时候单独开线程。Service默认是在主线程上跑的。
对于HTTP或者HTTPS的请求,调用HttpURLConnection类或者HttpsURLConnection类就行
2. 使用socket发送http请求
#python 3.X
# requests -->urllib -->socket
#导入socket 模块
import socket
#导入url解析的模块
from urllib.parseimport urlparse
#通过socket发送http 请求
def get_url(url):
#解析url ,获取host 及uri
url = urlparse(url)
#将URL解析为6个组件
# <scheme>://<netloc>/<path>;<params>?<query>#<fragment>
host =url.netloc
path =url.path
print(host,path)
#如请求资源为空,则设置为/
if path =="":
path ="/"
#建立socket 客户端连接
client = socket.socket()
client.connect((host, 80))
#发送请求信息 \r\n win 的换行回车 可以fiddler抓包 看看http请求行的格式。
python 3.X 发送的网络包,都是字节,所以,发送的信息,必须编码。
client.send("GET {} HTTP/1.1\r\nHost: {} \r\nConnection:close\r\n\r\n".format( path , host ).encode("utf-8"))
#3.x 网络传输的数据都是字节。必须以字节接收。如果想打印字符串,必须解码。
data =b""
#while 循环接收请求响应的数据。
while True:
d = client.recv(1024)#每次接收1024个字节
if d:#如果接收数据不为空,则拼接
data += d
print(1)
else:#否则,不再接收数据则跳出循环。
break
#print(data.decode())
#把数据解码 (包含响应头 + 响应体【通过浏览器渲染显示在网页中的内容】)
data = data.decode()
#取出响应体
html_data = data.split("\r\n\r\n")[1]
print(html_data)
#关闭客户端链接
client.close()
if __name__ =="__main__":
get_url("http://www..com")
3. GPRS模块作用是什么
GPRS模块作用,主要是将串口数据经过GPRS、CDMA、3G等无线网络,将数据传输到上位机软件,实现数据远程监测。而为那通信的GPRS 模块也叫WCTU 30XX,还可以将传感器模拟量数据采集转换成数字量传输到后台软件,实现对前端串口数据与模拟量数据分析和监控。还可以自定义I/O输入输出,同时支持自主AES、DES、3DES等加密方式。
4. Elasticsearch的底层模块深入解析之http、network和transport
系统梳理一下es的一些底层mole
我们就讲解http,network,transport三个mole最最常用的知识和参数
HTTP mole就是es的http api模块
http机制是完全异步的,也就是说线程不会因为等待响应而陷入阻塞,http异步通信机制的优点就是解决了C10k问题
如果可能的话,尽量使用http keep alive,可以提升性能,而且可以避免客户端发生http chunking现象
下面是一些常用的http设置
http mole,主要是用来对外提供请求接口服务的,我们不是会向es发送一个rest请求,其实就是走es的http mole的,其实就是用来处理外部的请求的
http.port,es对外暴露的http api接口的端口号,默认在9200~9300之间选择一个,优先选择9200,如果被绑定,则选择9201,以此类推
我们之前用curl工具,发送http请求,那么其实就是走es的http mole,还是http.port设置的http mole监听的端口号
默认的话,http.port就是9200,如果9200被占用,那么就会用9201,以此类推,一直到9300
es默认是绑定到localhost的,这只能让es运行在开发模式下,如果要运行在生产模式下,下面的一些network设置是必须设置的
network.host:节点绑定的hostname或者ip地址,设置之后,才能进入生产模式下
主要是对一些网络上的基础性的东西进行一个配置
network.host,绑定的是本地的回环地址,127.0.0.1,进入的是development mode,开发模式
如果将network.host,设置为比如192.168.31.187之类的这种hostname或者ip地址之后,进入proction mode,生产模式
transport是用来进行节点间的互相通信的模块
transport.tcp.port:用于配置节点间互相通信的端口号,默认是9300,范围在9300~9400之间,优先绑定9300,如果被占用,则用9301,以此类推
transport mole,es各个node之间,其实也会进行频繁的通信,比如交换cluster state,reqeust transfer,比如插入一条document,路由之后,应该是到node3的shard2上去处理,但是请求可能发送到的是node1的shard0上,node1就要将这个document index的请求转发给node3,让node3上的shard2去处理这个请求
默认transport.tcp.port端口号是9300,如果被占用,那么就会用9301,一直到9400,以此类推
5. Express框架:内置模块之HTTP模块(HTTP协议部分)
网络是用于信息的传输与接收,共享的虚拟平台,通过它把各个点,面到网的信息都联系到一起,从而实现这些资源的共享
网络传输数据具有一定的规则,这些规则被称为协议,HTTP就是规则中的一种,而且是使用最为频繁的一种协议
HTTP协议是网络协议的一种,超文本传输协议的简写
超文本传输协议传输的内容就是超文本的标记语言(文字,图片,视频,音频)它是TCP/IP协议之上的一个应用层协议,用于定义Web浏览器与Web服务器之间的交换数据的过程以及数据本身的格式
HTTP协议是一种单纯的网络传输协议,采用的是请求/应答的方式传递数据,一次请求对应一次应答(响应)
HTTP协议的约束
所谓三次握手,就是指在一个TCP连接时,需要客户端和服务器发送三个包,主要的目的是连接服务器指定的端口去建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息
客户端和服务器的传输过程,一般是无状态的传输方式,无状态的传输指的是你第一次去向服务器发送请求,服务器并不会记住这次请求。
TCP三次握手原理
http协议规定的服务器响应数据时的状态编码,就是状态码
1开头的
表示普通消息
2开头的
3开头的
4开头的
5开头的
第一步:检查浏览器缓存中是否缓存过该域名对应的IP地址
第二步:第二步:如果在浏览器缓存中没有找到IP,那么将继续查找本机系统是否缓存过IP
解析过程
text/html;charset=utf-8
字符串编码,node默认的字体编码是utf-8,浏览器的编码,默认是系统编码,简体中文编码,就是GBK编码,因此会出现乱码现象。
值是数字,字节的长度,一般不会设置,返回的内容就是个单纯的值
可以通过这个响应头解决跨域问题,设置为 * 号即可
HTTP中使用MIME类型代表文件的类型,服务器具体返回各种数据的能力,但是返回数据时,应该告诉浏览器返回的是一个什么类型的文件
MIME类型:文件类型的表述
6. OSI和TCP IP的功能!!
OSI是由世界INTERNET组织提出的协议标准,是TCP/IP协议的前身,要问功能就是类似TCP/IP,TCP/IP是OSI的发展后的产品,OSI七层协议的功能:
1.物理层
物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础。物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。
媒体和互连设备物理层的媒体包括架空明线、平衡电缆、光纤、无线信道等。通信用的互连设备指DTE和DCE间的互连设备。DTE即数据终端设备,又称物理设备,如计算机、终端等都包括在内。而DCE则是数据通信设备或电路连接设备,如调制解调器等。数据传输通常是经过DTE DCE,再经过DCE DTE的路径。互连设备指将DTE、DCE连接起来的装置,如各种插头、插座。LAN中的各种粗、细同轴电缆,T形接头、插头,接收器,发送器,中继器等都属于物理层的媒体和连接器。
2.数据链路层
数据链路可以粗略地理解为数据通道。物理层要为终端设备间的数据通信提供传输媒体及其连接。媒体是长期的,连接是有生存期的。在连接生存期内,收发两端可以进行不等的一次或多次数据通信。每次通信都要经过建立通信联络和拆除通信联络两过程。这种建立起来的数据收发关系就叫做数据链路。而在物理媒体上传输的数据难免受到各种不可靠因素的影响而产生差错,为了弥补物理层上的不足,为上层提供无差错的数据传输,就要能对数据进行检错和纠错。数据链路的建立、拆除,对数据的检错、纠错是数据链路层的基本任务。
3.网络层
网络层的产生也是网络发展的结果。在联机系统和线路交换的环境中,网络层的功能没有太大意义。当数据终端增多时。它们之间有中继设备相连。此时会出现一台终端要求不只是与惟一的一台而是能和多台终端通信的情况,这就产生了把任意两台数据终端设备的数据链接起来的问题,也就是路由或寻径。另外,当一条物理信道建立之后,被一对用户使用,往往有许多空闲时间被浪费掉了。于是人们自然会希望让多对用户共用一条链路。为解决这一问题,就出现了逻辑信道技术和虚拟电路技术。
在具有开放特性的网络中的数据终端设备,都要配置网络层的功能。现在市场上销售的网络硬件设备主要有网关和路由器等。
4.传输层
传输层是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用。当网络层服务质量不能满足要求时,它将服务加以提高,以满足高层的要求;当网络层服务质量较好时,它只用很少的工作。传输层还可进行复用,即在一个网络连接上创建多个逻辑连接。传输层也称为运输层。传输层只存在于端开放系统中,是介于低3层通信子网系统和高3层之间的一层,但是很重要的一层。因为它是由源端到目的端对数据传送进行控制从低到高的最后一层。
世界上各种通信子网在性能上存在着很大差异。例如电话交换网、分组交换网、公用数据交换网。局域网等通信子网都可互连,但它们提供的吞吐量、传输速率、数据延迟通信费用各不相同。对于会话层来说,却要求有一性能恒定的界面。传输层就承担了这一功能。它采用分流/合流,复用/介复用技术来调节上述通信子网的差异,使会话层感受不到。
此外传输层还要具备差错恢复、流量控制等功能,以此对会话层屏蔽通信子网在这些方面的细节与差异。传输层面对的数据对象已不是网络地址和主机地址,而是和会话层的界面端口。上述功能的最终目的是为会话提供可靠的、无误的数据传输。传输层的服务一般要经历传输连接建立阶段、数据传送阶段、传输连接释放阶段3个阶段才算完成一个完整的服务过程。
5.会话层
会话层提供的服务可使应用建立和维持会话,并能使会话获得同步。会话层使用校验点可使通信会话在通信失效时从校验点继续恢复通信。这种能力对于传送大的文件极为重要。会话层、表示层、应用层构成开放系统的高3层,面对应用进程提供分布处理、对话管理、信息表示、恢复最后的差错等。
6.表示层
表示层的作用之一是为异种机通信提供一种公共语言,以便能进行互操作。这种类型的服务之所以需要,是因为不同的计算机体系结构使用的数据表示法不同。在这种情况下,便需要会话层来完成这种转换。通过前面的介绍,我们可以看出,会话层以下5层完成了端到端的数据传送,并且是可靠、无差错的传送。但是数据传送只是手段而不是目的,最终是要实现对数据的使用。由于各种系统对数据的定义并不完全相同,最易明白的例子是键盘,其上的某些键的含义在许多系统中都有差异。这自然给利用其他系统的数据造成了障碍。表示层和应用层就担负了消除这种障碍的任务。
对于用户数据来说,可以从两个侧面来分析,一个是数据含义被称为语义,另一个是数据的表示形式,称做语法。像文字、图形、声音、文种、压缩和加密等都属于语法范畴。表示层设计了3类15种功能单位,其中上下文管理功能单位就是沟通用户间的数据编码规则,以便双方有一致的数据形式,能够互相认识。
7.应用层
应用层向应用程序提供服务,这些服务按其向应用程序提供的特性分成组,并称之为服务元素。有些可为多种应用程序共同使用,有些则为较少的一类应用程序使用。应用层是开放系统的最高层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务。其服务元素分为两类:公共应用服务元素CASE和特定应用服务元素SASE。CASE提供最基本的服务,它成为应用层中任何用户和任何服务元素的用户,主要为应用进程通信、分布系统实现提供基本的控制机制。特定服务则要满足一些特定服务,如文卷传送、访问管理、作业传送、银行事务、订单输入等。TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网间网协议)是目前世界上应用最为广泛的协议,它的流行与Internet的迅猛发展密切相关—TCP/IP最初是为互联网的原型ARPANET所设计的,目的是提供一整套方便实用、能应用于多种网络上的协议,事实证明TCP/IP做到了这一点,它使网络互联变得容易起来,并且使越来越多的网络加入其中,成为Internet的事实标准。
* 应用层—应用层是所有用户所面向的应用程序的统称。ICP/IP协议族在这一层面有着很多协议来支持不同的应用,许多大家所熟悉的基于Internet的应用的实现就离不开这些协议。如我们进行万维网(WWW)访问用到了HTTP协议、文件传输用FTP协议、电子邮件发送用SMTP、域名的解析用DNS协议、 远程登录用Telnet协议等等,都是属于TCP/IP应用层的;就用户而言,看到的是由一个个软件所构筑的大多为图形化的操作界面,而实际后台运行的便是上述协议。
* 传输层—这一层的的功能主要是提供应用程序间的通信,TCP/IP协议族在这一层的协议有TCP和UDP。
* 网络层—是TCP/IP协议族中非常关键的一层,主要定义了IP地址格式,从而能够使得不同应用类型的数据在Internet上通畅地传输,IP协议就是一个网络层协议。
* 网络接口层—这是TCP/IP软件的最低层,负责接收IP数据包并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。
7. Meteor API HTTP
HTTP在客户端和服务器上提供HTTP请求API。 要使用这些函数,通过在终端中运行将HTTP包添加到您的项目中:
要使用的HTTP方法,如“GET”,“POST”或“HEAD”。
要检索的URL。
可选的回调。 如果通过,方法异步运行,而不是同步,并调用asyncCallback。 在客户端,这个回调是必需的。
用作HTTP请求主体的字符串。
JSON能够将对象串化并用作HTTP请求体。 覆盖内容。
查询字符串以进入URL。 覆盖url中的任何查询字符串。
要编码的请求参数字典,并放置在URL(对于GET)或请求体(对于POST)中。 如果指定了内容或数据,则参数将始终放在URL中。
表单“用户名:密码”的HTTP基本认证字符串
字符串字典,标题添加到HTTP请求。
在失败前等待请求的最长时间(以毫秒为单位)。 默认情况下没有超时。
如果为true,则透明地遵循HTTP重定向。 不能在客户端设置为false。 默认为true。
在服务器上,HTTP.call通过使用npm请求模块来实现。 此对象中的任何选项都将直接传递给请求调用。
在客户端上,在发送请求之前调用它,以允许更直接地操作底层的XMLHttpRequest对象,该对象将作为第一个参数传递。 如果回调返回false,请求将不会被发送。
这个函数启动一个到远程服务器的HTTP请求。
在服务器上,这个函数可以同步运行,也可以异步运行。 如果回调被忽略,它将同步运行,并且一旦请求成功完成,结果就会返回。 如果请求不成功,则会抛出错误。 从Meteor方法中进行服务器到服务器的HTTP API调用时,这是非常有用的,因为该方法可以基于同步HTTP调用的结果成功或失败。 在这种情况下,考虑使用this.unblock()来允许同一连接上的其他方法同时运行。
在客户端上,这个函数必须通过传递回调来异步使用。 请注意,有些浏览器在发送请求之前首先发送OPTIONS请求(以确定CORS
头)。
支持HTTP和HTTPS协议。 url参数必须是绝对URL,包括服务器上的协议和主机名,但可能与客户机上的当前主机相关。 查询选项替换url的查询字符串。 放在URL中的params中指定的参数将附加到任何查询字符串。 例如,使用“/ path?query”的url和{foo:'bar'}的参数,最终的URL将是'/ path?query&foo = bar'。
参数被放入URL或请求体中,具体取决于请求的类型。 如果请求没有正文,比如GET和HEAD,那么这些参数将始终放在URL中。 对于POST或其他类型的请求,参数将被编码到具有标准的x-www-form-urlencoded内容类型的主体中,除非内容或数据选项用于指定主体,在这种情况下参数将是 附加到URL。
当以异步模式运行时,回调会收到两个参数,错误和结果。 如果请求以任何方式失败,包括400或500范围内的网络错误,超时或HTTP状态码,则错误参数将包含错误。 在4xx / 5xx HTTP状态码的情况下,错误时的响应属性与结果对象的内容相匹配。 在同步模式下运行时,从函数返回结果,或者抛出错误。
数字HTTP结果状态码,错误时为null。
作为字符串的HTTP响应的主体。
如果响应标头指示JSON内容,则包含解析为JSON对象的文档正文.
来自响应的HTTP标头字典。
发送HTTP GET请求。等同于使用“GET”作为第一个参数来调用HTTP.call。
请求发送到的URL。
选项传递给HTTP.call。
请求完成时调用的回调。 客户端需要。
8. 用什么mole来发送http请求 python
发送请求
使用Requests发送网络请求非常简单。
一开始要导入Requests模块:
>>> import requests
然后,尝试获取某个网页。本例子中,我们来获取Github的公共时间线
>>> r = requests.get('')
9. vue开发中有几种网络请求方式用哪一种
选择什么网络模块?Vue中发送网络请求有非常多的方式,那么,在开发中,如何选择呢?
选择一:传统的ajax是基于XMLHTTPRequest(XHR)
为什么不用他呢?
非常好解释,配置和调用方式等非常混乱
编码起来非常蛋疼
选择二:JQuery-Ajax 相遇与传统的ajax非常好用
为什么不用他?
Vue项目中不适用jquery了。
专门适用ajax专门引用jquery,麻烦
选择三: vue-resource 体积小
为什么不用他?
不再更新。
选择四:axios 用起来方便
功能特点:
在浏览器中发送xmlhttprequest请求
在node.js中发送http请求
支持promiseApi
拦截请求和响应
转换请求和响应数据
10. 爬虫的通用模块
网络爬虫(又叫网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接受请求响应,一种按照一定的规则,自动地抓取互联网信息的程序
只要浏览器能做的事情,原则上,爬虫都能做
1.通用爬虫:通常指搜索引擎的的爬虫
2.聚焦爬虫:针对特定网站的爬虫
robots协议:网站通过robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不可以抓取
爬虫要根据当前url地址对应的响应为准,当前url地址的elements的内容和url的对应不一样
响应状态码:200:成功 302:临时转移至新的url 307:临时转移至新的url 404:not found 500:服务器内部错误
bytes型和str型的转换:编码:encode()从str转换到bytes,解码:decode()从bytes转换到str,编码和解码方式必须一致,否则会出现乱码
先导入:import requests
1.response = requests.get('url地址') 拿到响应
2. response.content 得到bytes型数据
3. response.content.decode() 转化成str类型
4.response.text 也能获取网页字符串,不过解码方式是猜的,可能出现乱码
所以解决requests中编解码的方法
1.response.content.decode()
2.response.content.decode('gbk')
3.response.text
从上往下一次尝试,即可
5.response.status_code 获取请求状态
可以通过assert response.status_code == 200 来判断是否成功
6.response.request.headers 请求头
7.response.headers 响应头
8.response.request.url 请求的url
9.response.url 响应的url
10.发送带headers的请求
准备headers = {}的字典,然后将字典传入请求中,response = requests.get('url地址',headers=headers)
11.发送带参数的请求
准备字典kw = {'name':'xiaoming'},传入请求中response = requests.get('url地址',params=kw)
12.发送post请求
1.在登陆注册是(post比get相对安全)
2.需要传输大文本内容的时候(post请求对数据长度没有要求)
准备post_data = {},将post_data传入请求中,response = requests.post('url地址',data=post_data,headers = headers)
13.使用代理
准备proxies={'http':'http://12.34.56.79:9527','https':'https://12.34.56.79:9527'}字典,将proxies传入请求中,response.requests.get('url地址',proxies=proxies)
使用代理的原因:1.让服务器以为不是同一个客户端在请求
2.防止我们的真实地址被泄露,防止被追究责任
14.cookie和session区别
1.cookie数据存放在客户的浏览器上,session数据存放在服务器上
2.cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗
3.session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能
4.单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie
15.爬虫处理cookie和session
1.带上cookie,session的好处:能够请求到登录之后的页面
2.带上cookie,session的弊端:一套cookie和session往往和一个用户对应,请求太快,请求次数太多,容易被服务器识别为爬虫
3.不需要cookie的时候尽量不要去使用cookie,但为了获取登录后的页面,我们必须发送带cookie的请求
4.携带一堆cookie进行请求,把cookie组成cookie池
5.使用requests提供的session类,来实现客户端和服务器的会话保持
session = requests.session()
session.post('url地址',data=post_data,headers=headers)
response = session.get(url,headers)
6.不发送post请气,使用cookie获取登录后的页面
1.cookie过期时间很长的网站
2.在cookie过期之前能够拿到所有的数据
3.配合其他程序一起使用,其他程序程序获取cookie,当前程序专门请求页面
16.获取登录后页面的三种方式
1.实例化session,使用session发送post请求,在使用它获取登录后的页面
2.headers中添加cookie键,值为cookie字符串
3.在请求方法中添加cookies参数,接受字典形式的cookie,字典形式的cookie中的键是cookie的name对应的值,值为cookie的value对应的值
17.寻找登录的post地址
1.form表单中寻找action对应的url地址
post的数据是input标签中name的值作为键,真正的用户名密码作为值得字典,post的url地址就是action对应的url地址
2.抓包,寻找登录的url地址
勾选perserve log按钮,防止页面跳转找不到url,
寻找post数据,确定参数,
参数不会变,直接用,比如密码不是动态加密的时候,
参数会变,参数在当前的响应中,通过js生成
18.定位想要的js
1.选择会出触发js时间的按钮,点击event listener,找到js的位置
2.通过chrome中的search all file来搜索url中关键字
3.添加断点的方式来查看js操作,通过python来进行同样的操作
19.requests小技巧
1.requests.util.dict_form_cookiejar 把cookie对象转化为字典
2.requests.util.cookiejar_form_dict把字典转化为cookie对象
3.requests.utils.unquote('url地址') 对url地址进行解码
4.requests.utils.quote('url地址') 对url地址进行编码
5.请求ssl证书验证:response = requests.get('url地址',verify=False)
6.设置超时 response = requests.get(url,timeout=10)
20 安装retrying第三方模块:可以让方法执行多次后再选择失败