转 使用utl_http获取某个http页面内容
#########1.ACL详细解释:
11g 对于XDB UTL_HTTP or others package 的权限管控进一步加强,如果需要使用到XDB 以下包 UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP, UTL_INADDR,,必须显性使用到 授予用户ACL 权限,
(
Security in Oracle 11 and greater has been enhanced by limiting access to packages and procedures that allow external access to the database.
Access to these packages, UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP, UTL_INADDR, must explicitly be granted to users through Access Controls Lists (ACL)
)
如果不授予ACL 权限,那么可能在调用UTL_ 包,碰到如下报错 ORA-24247: network access denied by access control list (ACL)
#########2.详细解释如下:
How To Set Network ACLs in Oracle To Access Packages UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP, UTL_INADDR (文档 ID 958129.1)
Security in Oracle 11 and greater has been enhanced by limiting access to packages and procedures that allow external access to the database.
Access to these packages, UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP, UTL_INADDR, must explicitly be granted to users through Access Controls Lists (ACL)
SOLUTION
1) You can find out what users currently need access to these packages with this query
column REFERENCED_NAME format a20
SELECT OWNER, REFERENCED_NAME FROM DBA_DEPENDENCIES
WHERE referenced_name IN ('UTL_TCP','UTL_SMTP','UTL_MAIL','UTL_HTTP','UTL_INADDR')
AND owner NOT IN ('SYS','PUBLIC','ORDPLUGINS');
for example,
SQL> SELECT OWNER, REFERENCED_NAME FROM DBA_DEPENDENCIES
WHERE referenced_name IN ('UTL_TCP','UTL_SMTP','UTL_MAIL','UTL_HTTP','UTL_INADDR')
AND owner NOT IN ('SYS','PUBLIC','ORDPLUGINS');
OWNER REFERENCED_NAME
------------------------------ --------------------
TOOLS UTL_HTTP
FOO UTL_HTTP
This shows us that two schemas, TOOLS and FOO, needs access to the UTL_HTTP package
2) We can grant access to the UTL_HTTP package with this statement
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'UTL_HTTP.xml', description=>'UTL_HTTP access ', principal=> 'TOOLS', is_grant=>TRUE, privilege=>'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'UTL_HTTP.xml',principal => 'FOO',is_grant => true, privilege => 'connect');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl=>'UTL_HTTP.xml',host=>'YOUR_HOST_NAME_HERE');
END;
/
COMMIT;
Note the following:
(以上代码将给TOOLS,FOO 使用UTL_HTTP 权限)
The above code will grant access to UTL_HTTP to both TOOLS and FOO. If you need to add additional user, use the ADD_PRIVILEGE() procedure and add the user to the existing ACL.
There can only be one ACL assigned to a host that grants a specific privilege. As an example, if host =>'199.199.199.199', then the UTL_HTTP ACL will cover all principals associated with that host. This is true for wildcard hosts as well '*';
The "connect" privilege will grant access to all of these packages, UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP.
(如果想使用UTL_INADDR权限,需要resolve 权限,UTL_INADDR权限解释如下:)
(select utl_inaddr.get_host_name('127.0.0.1') from dual;)
If the user needs access to UTL_INADDR, they will need to be granted the 'resolve' privilege instead of the 'connect' privilege in CREATE_ACL()
More information on this can be found in the following manual
Oracle® Database PL/SQL Packages and Types Reference
11g Release 1 (11.1)
Part Number B28419-03
80 DBMS_NETWORK_ACL_ADMIN
######3.如果想规避ORA-24247这个方法,可以使用如下方法 但是有一个隐患,权限过大。
You can grant XDBADMIN to your user who are using UTL_HTTP or others package which needs ACL
it will bypass the error ORA-24247: network access denied by access control list (ACL)
如下方法:
grant XDBADMIN to marc;
(WARNING: It will give Extra Privilege to the Oracle User, So it is better to use ACL for a Security point of view.)
How To Recover From An "ORA-24247: network access denied by access control list (ACL)" Error (文档 ID 1644641.1)
########zabbix 案例
zabbix 需要XML 权限,是因为调用这个包SYS.UTL_INADDR时候,没有权限
(类似命令如下:select utl_inaddr.get_host_name('127.0.0.1') from dual;)
[root@zabbix orabbix]# tailf /opt/orabbix/logs/orabbix.log
[main] INFO Orabbix - --------- on Database -> orcl
[pool-1-thread-1] WARN Orabbix - Error while executing ->dbversion- on database ->172.20.10.183-oracle- Exception received ORA-24247: network access denied by access control list (ACL)
ORA-06512: at "SYS.UTL_INADDR", line 4
ORA-06512: at "SYS.UTL_INADDR", line 35
ORA-06512: at line 1
出现这些日志,不影响后面的操作,这个不确定,
https://www.cnblogs.com/Dev0ps/p/8886181.html (zabbix 详细解释如下,重要):
zabbix利用orabbix监控oracle
Orabbix 是一个用来监控 Oracle 数据库实例的 Zabbix 插件。(插件安装在zabbix-server端)

下载地址:http://www.smartmarmot.com/product/orabbix/download/
zabbix-server上操作
Orabbix是通过JDBC去连接oracle数据库,然后过滤想要的数据,所以需要jdk环境
我测试过jdk1.7和1.8都可以,直接yum安装,或者下载rpm包,rpm -ivh安装,都可以
这里,我是直接rpm安装的,
|
1
2
3
4
5
|
[root@zabbix ~]# rpm -ivh jdk-8u102-linux-x64.rpmPreparing... ########################################### [100%] 1:jdk1.8.0_102 ########################################### [100%] |
在/opt目录下新建一个orabbix目录:
|
1
|
[root@oracle orabbix]#midir -p /opt/orabbix |
(建议在此目录下,如果放置其他目录稍后需要更改orabbix的启动文件orabbix,启动文件默认写在opt/orabbix目录下 )
[root@zabbix opt]# cd orabbix/
上传orabbix-1.2.3.zip
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
[root@zabbix orabbix]# lsorabbix-1.2.3.zip解压[root@zabbix orabbix]# unzip -q orabbix-1.2.3.zip[root@zabbix orabbix]# lsconf init.d lib orabbix-1.2.3.zip orabbixw.exe run.sh uninstall.cmddoc install.cmd orabbix-1.2.3.jar orabbix.exe run.bat template授权[root@zabbix orabbix]# cd ..[root@zabbix opt]# chmod -R a+x orabbix/[root@zabbix ~]# cd /opt/orabbix/conf/[root@zabbix conf]# lsconfig.props log4j.properties query_a_1.props query_b.props query.propsconfig.props.sample log4j.properties.sample query_a.props query - Copy.props query.props.sample[root@zabbix conf]# cp config.props.sample config.props |
编辑配置文件:
[root@zabbix conf]# vim config.props
源配置文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
[root@zabbix conf]# egrep "^[a-Z,1-9]" config.props.sampleZabbixServerList=ZabbixServer1,ZabbixServer2ZabbixServer1.Address=IP_ADDRESS_OF_ZABBIX_SERVERZabbixServer1.Port=PORT_OF_ZABBIX_SERVERZabbixServer2.Address=IP_ADDRESS_OF_ZABBIX_SERVERZabbixServer2.Port=PORT_OF_ZABBIX_SERVEROrabbixDaemon.PidFile=./logs/orabbix.pidOrabbixDaemon.Sleep=300OrabbixDaemon.MaxThreadNumber=100DatabaseList=DB1,DB2,DB3DatabaseList.MaxActive=10DatabaseList.MaxWait=100DatabaseList.MaxIdle=1DB1.Url=jdbc:oracle:thin:@server.domain.example.com:<LISTENER_PORT>:DB1DB1.User=zabbixDB1.Password=zabbix_passwordDB1.MaxActive=10DB1.MaxWait=100DB1.MaxIdle=1DB1.QueryListFile=./conf/query.propsDB2.Url=jdbc:oracle:thin:@server2.domain.example.com:<LISTENER_PORT>:DB2DB2.User=zabbixDB2.Password=zabbix_passwordDB2.QueryListFile=./conf/query.propsDB3.Url=jdbc:oracle:thin:@server3.domain.example.com:<LISTENER_PORT>:DB3DB3.User=zabbixDB3.Password=zabbix_passwordDB3.QueryListFile=./conf/query.props |
修改之后
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
[root@zabbix conf]# egrep "^[a-Z,1-9]" config.propsZabbixServerList=ZabbixServer1 #(zabbixserver的名字,下行中address和port都引用到了这个名字,所以下面两行的前缀名字要与这里的名字保持一致)ZabbixServer1.Address=127.0.0.1 #我这里就是在zabbix server上面操作的,所以这里是127.0.0.1ZabbixServer1.Port=10051 #zabbix server的服务端口OrabbixDaemon.PidFile=./logs/orabbix.pidOrabbixDaemon.Sleep=300OrabbixDaemon.MaxThreadNumber=100DatabaseList=172.20.10.183-oracle,192.168.56.99-oracle #这里很重要,跟下面的对应上DatabaseList.MaxActive=10DatabaseList.MaxWait=100DatabaseList.MaxIdle=1172.20.10.183-oracle.Url=jdbc:oracle:thin:@172.20.10.183:1521:orcl #172.20.10.183 oracle数据库的地址,1521端口,orcl数据库实例名172.20.10.183-oracle.User=zabbix #授权的账号172.20.10.183-oracle.Password=zabbix #授权的密码172.20.10.183-oracle.MaxActive=10172.20.10.183-oracle.MaxWait=100172.20.10.183-oracle.MaxIdle=1172.20.10.183-oracle.QueryListFile=./conf/query.props #要查询的语句都在这定义的,不满意自己改 |
oracle主机上操作(这步可以省略,只要知道数据库实例,账号,密码)
下面是oracle 11g的(12c 语法不一样)授权语句如下,创用户,授权,这些操作,我都是在oracle数据库的sqlplus下执行的
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
[oracle@oracle ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Wed Sep 7 18:01:54 2016Copyright (c) 1982, 2011, Oracle. All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL>CREATE USER ZABBIX IDENTIFIED BY zabbix DEFAULT TABLESPACE SYSTEM TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK;GRANT CONNECT TO ZABBIX;GRANT RESOURCE TO ZABBIX;ALTER USER ZABBIX DEFAULT ROLE ALL;GRANT SELECT ANY TABLE TO ZABBIX;GRANT CREATE SESSION TO ZABBIX;GRANT SELECT ANY DICTIONARY TO ZABBIX;GRANT UNLIMITED TABLESPACE TO ZABBIX;GRANT SELECT ANY DICTIONARY TO ZABBIX;GRANT SELECT ON V_$SESSION TO ZABBIX;GRANT SELECT ON V_$SYSTEM_EVENT TO ZABBIX;GRANT SELECT ON V_$EVENT_NAME TO ZABBIX;GRANT SELECT ON V_$RECOVERY_FILE_DEST TO ZABBIX; |
启动orabbix
[root@zabbix orabbix]# cp init.d/orabbix /etc/init.d/
[root@zabbix orabbix]# ll /etc/init.d/orabbix
-rwxr-xr-x 1 root root 1693 Sep 14 21:40 /etc/init.d/orabbix
[root@zabbix orabbix]# /etc/init.d/orabbix start
Starting Orabbix service:
报错的话,检查配置文件,数据库地址,端口,实例名,账号,密码是否正确,需要验证对于不懂oracle的怎么办,搜命令呗,我也是一路过来,各种坑~~~~~
然后里面看日志
[root@zabbix orabbix]# tailf /opt/orabbix/logs/orabbix.log
[main] INFO Orabbix - --------- on Database -> orcl
[pool-1-thread-1] WARN Orabbix - Error while executing ->dbversion- on database ->172.20.10.183-oracle- Exception received ORA-24247: network access denied by access control list (ACL)
ORA-06512: at "SYS.UTL_INADDR", line 4
ORA-06512: at "SYS.UTL_INADDR", line 35
ORA-06512: at line 1
出现这些日志,不影响后面的操作,如果你是完美主义者,满足你
在oracle数据库的sqlplus下执行下面三条命令
exec dbms_network_acl_admin.create_acl(acl => 'resolve.xml',description =>'resolve acl', principal =>'ZABBIX', is_grant => true, privilege =>'resolve');
exec dbms_network_acl_admin.assign_acl(acl=> 'resolve.xml', host =>'*');
commit;
到此,安装配置完成,则通过web页面访问监控界面直接导入模板即可
模版放置在/opt/orabbix/template下
Orabbix_export_full.xml #只需要导入这个一个模板就好

添加主机

然后链接oracle的模板

添加完成之后的效果

查看最新数据

这时候图也有了

常见错误
[root@zabbix orabbix]# tailf /opt/orabbix/logs/orabbix.log
[main] ERROR Orabbix - Error on Configurator for database 172.20.10.183 oracle -->ORA-01017: invalid username/password; logon denied
config.props配置文件中,数据库账号密码不对,或者在oracle数据库没授权这个用户
########################
3.
使用utl_http获取某个http页面内容
首先确认浏览器可以访问IE ,如果不能访问,
vmware 查看 虚拟机 网络适配器 网络连接模式 为NAT
vmware 查看 编辑 虚拟网络编辑器 VMNET0 桥接模式 自动
SQL> select utl_http.request('http://www.SINA.com') from dual;
select utl_http.request('http://www.SINA.com') from dual
*
ERROR at line 1:
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1720
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at line 1
sys:
BEGIN
dbms_network_acl_admin.create_acl(acl => 'db2.xml',
DESCRIPTION => 'Normal Access',
principal => 'CONNECT',
is_grant => TRUE,
PRIVILEGE => 'connect',
start_date => NULL,
end_date => NULL);
END;
/
commit;
SELECT any_path
FROM resource_view
WHERE any_path like '/sys/acls/%.xml';
begin
dbms_network_acl_admin.add_privilege(acl => 'db2.xml',
principal => 'PENG',
is_grant => TRUE,
privilege => 'connect',
start_date => null,
end_date => null);
END;
/
commit;
begin
dbms_network_acl_admin.assign_acl(acl => 'db2.xml',
host => 'www.sina.com',
lower_port => 80,
upper_port => NULL);
end;
/
begin
dbms_network_acl_admin.assign_acl(acl => 'db2.xml',
host => 'www.sina.com',
lower_port => NULL,
upper_port => NULL);
end;
/
begin
dbms_network_acl_admin.assign_acl(acl => 'db2.xml',
host => 'www.sina.com'
);
end;
/
commit;
select utl_http.request('http://www.sina.com') from dual;
select utl_http.request('http://www.SINA.com') from dual;
#######sample
sys:
BEGIN
dbms_network_acl_admin.create_acl(acl => 'SMTP.xml',
DESCRIPTION => 'Normal Access',
principal => 'CONNECT',
is_grant => TRUE,
PRIVILEGE => 'connect',
start_date => NULL,
end_date => NULL);
END;
/
commit;
BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'SMTP.xml',
principal => 'PENG',
is_grant => true,
privilege => 'resolve');
END;
/
commit;
BEGIN
dbms_network_acl_admin.assign_acl (acl => 'SMTP.xml',
host => '*',
lower_port => 1,
upper_port => 9999);
END;
/
commit;
commit;
#################### sample 2
http://www.smartmarmot.com/wiki/index.php?title=Orabbix
NOTE : If you are using Oracle 11g, you will need to add the following:
exec dbms_network_acl_admin.create_acl(acl => 'resolve.xml',description => 'resolve acl', principal =>'ZABBIX', is_grant => true, privilege => 'resolve');
exec dbms_network_acl_admin.assign_acl(acl => 'resolve.xml', host =>'*');
commit;
You can verify the above is correct by running:
select utl_inaddr.get_host_name('127.0.0.1') from dual;
- For this example on RedHat, run:
chkconfig -add orabbix
- Verify with:
chkconfig -list
- Create a Host entry in Zabbix for the DB Instance/s you are
planning to monitor, and import the templates found at: /opt/orabbix/template
Please note, instructions for this step can be found in the Zabbix
Manual at
http://www.zabbix.com/documentation.php
With this step, ensure the name of your host in Zabbix is the
same name of the SID or Oracle instance name.
############################
select utl_http.request('http://www.SINA.com') from dual;
SELECT acl,
principal,
privilege,
is_grant,
TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date,
TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date
FROM dba_network_acl_privileges;
select host, lower_port, upper_port, acl, aclid from dba_network_acls;
select utl_http.request('http://www.5ienet.com') from dual;
select utl_http.request('http://www.sina.com') from dual;
select utl_http.request('http://bsy.sz.bendibao.com') from dual;
###########new error
SQL> select utl_http.request('http://www.sina.com') from dual;
select utl_http.request('http://www.sina.com') from dual
*
ERROR at line 1:
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1720
ORA-29024: Certificate validation failure
ORA-06512: at line 1
############sample 3:
3、创建数据库账号
首先我们需要在被监控的Oracle上面创建一个账号,用于zabbix的数据获取,在oracle的sqlplus里面执行。
CREATE USER ZABBIX
IDENTIFIED BY "zabbix"
DEFAULT TABLESPACE SYSTEM
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
#2 Roles for ZABBIX
GRANT CONNECT TO ZABBIX;
GRANT RESOURCE TO ZABBIX;
ALTER USER ZABBIX DEFAULT ROLE ALL;
#5 System Privileges for ZABBIX
GRANT SELECT ANY TABLE TO ZABBIX;
GRANT CREATE SESSION TO ZABBIX;
GRANT SELECT ANY DICTIONARY TO ZABBIX;
GRANT UNLIMITED TABLESPACE TO ZABBIX;
GRANT SELECT ANY DICTIONARY TO ZABBIX;
如果我们的数据库是Oracle 11g,我们还需要执行下面的语句。
exec dbms_network_acl_admin.create_acl(acl => 'resolve.xml',description => 'resolve acl', principal =>'ZABBIX', is_grant => true, privilege => 'resolve');
exec dbms_network_acl_admin.assign_acl(acl => 'resolve.xml', host =>'*');
commit;
###############
https://blog.csdn.net/indexman/article/details/17048573
https://blog.csdn.net/indexman/article/details/17048677
https://blog.csdn.net/x6_9x/article/details/79240581
转 使用utl_http获取某个http页面内容的更多相关文章
- 服务端获取客户端html页面内容-2013-6-28-2
客户端怎么提交 整个html页面? 分析: 1>我们知道b/s模式,也知道http协议.服务端想要获取客户端的数据,客户端就 必须提交给它,服务器才能获取到. 2> ...
- 获取iframe子页面内容高度给iframe动态设置高度
<!DOCTYPE html><html> <head> <meta charset="UTF-8" /> <meta nam ...
- PHP curl获取页面内容,不直接输出到页面,CURLOPT_RETURNTRANSFER参数设置
使用PHP curl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出.这个时候就必需设置curl的或true. 1.curl获取页面内容, 直接输出例子: <?php $ ...
- 获取windows身份认证网站页面内容
有些网站必须登录才能获取到页面内容. 代码如下,可获取数据. var url = "https://yunda-api-test.appspot.com/int/parcel?wait=tr ...
- 利用webBrowser获取框架内Html页面内容
原文:利用webBrowser获取框架内Html页面内容 利用webBrowser获取页面比较简单,MSDN下有示例,在这里不必多说. 可是一些 HTML 文档由“框架”构成,或可以存放它们自己独特 ...
- PHP CURL获取页面内容输出例子
使用PHP curl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出.这个时候就必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true. 1.curl ...
- python+selenium 页面中存在选项卡时,获取页面内容的小技巧
最近用selenium读取页面内容时,遇到包含选项卡的页面,由于选项卡多由js加载其中的内容,所以在网址打开时只能获取到默认显示的选项卡中的内容,而tab2.tab3等等都需要傻傻的点击一下才会获取到 ...
- js获取用户当前页面复制的内容并修改
如果只是单纯的获取页面上复制的内容可以使用window.getSelection()来获取选中的内容,在执行复制操作就可以了,但是如果想修改复制的内容可以先获取要复制的内容修改之后再用document ...
- C#获取页面内容的几种方式
常见的Web页面获取页面内容用 WebRequest 或者 HttpWebRequest 来操作 Http 请求. 例如,获取百度网站的 html 页面 var request = WebReques ...
随机推荐
- js获取指定小时日期格式化
不得不感叹一下,聪明的程序员写的代码真是让人惊奇 找了一圈格式化代码的方式,下面的这个使用了一个 slice 函数,真是厉害 https://stackoverflow.com/questions/4 ...
- Fast Scatter-Gather I/O
Some applications may need to read or write data to multiple buffers, which are separated in memory. ...
- 20169219《Linux内核原理与分析》第十一周作业
设备与模块 关于设备驱动和设备管理的四种内核成分: 设备类型:为了统一普通设备的操作所采用的分类. 模块:用于按需加载和卸载目标码的机制. 内核对象:内核数据结构中支持面向对象的简单操作,还支持维护对 ...
- java读取classpath下properties文件注意事项
1.properties文件在classpath根路径下读取方式 Properties properties = new Properties(); properties.load(BlogIndex ...
- C#根据弹窗标题获取窗体句柄并模拟点击按钮(FindWindow,FindWindowEx,SendMessage)
任务:将下面弹窗自动关闭 /// <summary> /// 找到窗口 /// </summary> /// <param name="lpClassName& ...
- 源码方式安装rabbitmq
由于工作环境中属于内网,yum安装方式不可用,所以需要采用源码进行rabbitmq的安装.rabbitmq是基于erlang环境进行运行的,所以需要先按照erlang环境,才能运行rabbitmq-s ...
- 167. Two Sum II - Input array is sorted两数之和
1. 原始题目 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明 ...
- 装饰器设计模式初探及Java中实际应用举例
本篇随笔主要介绍用Java实现简单的装饰器设计模式: 先来看一下装饰器设计模式的类图: 从图中可以看到,我们可以装饰Component接口的任何实现类,而这些实现类也包括了装饰器本身,装饰器本身也可 ...
- ceph数据自动均衡程序
声明:程序基于ceph0.94.x制作 前言: ceph数据自动均衡,为了解决新集群搭建完成和添加新的节点后,不同或者相同容量的磁盘上面pg的分布不均衡,导致集群使用率达不到理想的标准 调整前准备: ...
- phonegap移动开发之jsonp协议
最近我一直在学习android开发.并且做了几个小软件,我会在百度网盘和二维码的形式分享出去!源码会分享到github上.下面我还是主要来说说jsonp协议吧.可能许多初学者会遇到许多跟我一样的问题. ...