Oracle 通过UTL_HTTP 发送http请求并处理发送内容中包含空格和特殊字符的问题
2017-05-22 13:39
531 查看
Oracle中可以通过UTL_HTTP发送http请求,例子如下:
CREATE OR REPLACE PROCEDURE test(v_userid in varchar2,v_content in varchar2 ) IS req UTL_HTTP.REQ; resp UTL_HTTP.RESP; v_message varchar2(10000); xmlstr varchar2(30000); begin begin req := UTL_HTTP.BEGIN_REQUEST('http://ip:port/weixin?userid='||v_userid||'&'||'content='||v_content); utl_http.set_header(req, 'Content-Type', 'text/html; charset=utf-8'); utl_http.write_text(req,xmlstr); --通过body发送消息 xmlstr:=v_content; utl_http.set_header(req, 'Content-Length',lengthb(xmlstr)); utl_http.write_text(req,xmlstr); resp := UTL_HTTP.GET_RESPONSE(req); LOOP UTL_HTTP.read_line(resp,v_message, TRUE); dbms_output.put_line(v_message); END LOOP; utl_http.end_request(req); utl_http.end_response(resp); EXCEPTION WHEN utl_http.end_of_body THEN utl_http.end_response(resp); WHEN OTHERS THEN utl_http.end_response(resp); utl_http.end_request(req); end; END test;
调用的时候,如果v_content中包含空格或者其他特殊字符的时候请求就会失败,要想解决这个问题的话,就需要对内容进行编码,我们可以通过url encode来对相应的内容编码,web应用接收到相应的数据做相应的解码即可,修改后的代码如下:
CREATE OR REPLACE PROCEDURE test(v_userid in varchar2,v_content in varchar2 ) IS req UTL_HTTP.REQ; resp UTL_HTTP.RESP; v_message varchar2(10000); xmlstr varchar2(30000); begin begin req := UTL_HTTP.BEGIN_REQUEST('http://ip:port/weixin?userid='||v_userid||'&'||'content='||utl_url.escape(v_content,true,'UTF8')); utl_http.set_header(req, 'Content-Type', 'text/html; charset=utf-8'); utl_http.write_text(req,xmlstr); --通过body发送消息 xmlstr:=utl_url.escape(v_content,true,'UTF8'); utl_http.set_header(req, 'Content-Length',lengthb(xmlstr)); utl_http.write_text(req,xmlstr); resp := UTL_HTTP.GET_RESPONSE(req); LOOP UTL_HTTP.read_line(resp,v_message, TRUE); dbms_output.put_line(v_message); END LOOP; utl_http.end_request(req); utl_http.end_response(resp); EXCEPTION WHEN utl_http.end_of_body THEN utl_http.end_response(resp); WHEN OTHERS THEN utl_http.end_response(resp); utl_http.end_request(req); end; END test;
相关文章推荐
- Oracle 通过UTL_HTTP 发送http请求并处理发送内容中包含空格和特殊字符的问题
- 通过ORACLE的UTL_HTTP工具包发送包含POST参数的请求
- 在oracle中通过utl_http获得指定网页内容
- oracle通过utl_http获得指定网页的内容
- Linux 下如何处理包含空格和特殊字符的文件名
- 处理内容有&特殊字符thinkphp返回xml无法解析的问题<![CDATA[xxx]]>
- 关于Android HTTP请求URI中包含特殊字符,例如中文,空格等,请求400
- C# winform端 通过HttpWebRequest进行post和get请求,数据格式为json,后台java端接收,其中有关传输特殊字符(\t,\r,',\n,n)等处理
- C# httprequest post 内容有百分号,部分特殊字符乱码问题
- Java环境变量配置问题:路径包含空格或特殊字符(_,~等)
- [转]:在oracle中通过utl_http获得指定网页内容,支持中文
- 密码中有特殊的字符IOS如何处理 IOS中URL包含中文参数的问题
- 密码中有特殊的字符IOS如何处理 IOS中URL包含中文参数的问题
- 因oracle用户密码包含特殊字符导致sqlplus无法正常登录问题
- Linux 下如何处理包含空格和特殊字符的文件名
- Linux 下如何处理包含空格和特殊字符的文件名
- (android文件下载)下载链接中包含特殊字符--空格,中文等,导致无法识别处理方案
- Linux 下 Oracle 用户的密码包含特殊字符时给 sqlplus 和 imp/exp 传递密码参数的处理
- http请求数据包含特殊字符处理(java)
- 密码中有特殊的字符IOS如何处理 IOS中URL包含中文参数的问题