需要帮助消除UTL_HTTP.read_text.sorry中的标题,直接引起我的怀疑。
我有一个代码,我试图从pl / sql程序连接WSDL 在我的代码中,我使用的是UTL_HTTP.read_text而不是UTL_HTTP.READ_LINE。
UTL_HTTP.read_text(l_http_resp,l_text,32767);
DBMS_LOB.writeappend (l_ws_response, LENGTH(l_text), l_text);
Read_line:
utl_http.read_line(l_http_resp, l_ws_response);
我选择read_text而不是read_line的原因是,提供给UTL_http的请求有比varchar2限制更多的数据,并且当我使用read_text而不是read_line时(因为ASK TOM建议)它正在工作。 / p>
现在当我使用read_text时,标题会附加响应。
示例输出,当我使用read_text
时***从回复中打印标题
Connection: close
Date: Tue, 15 May 2018 08:55:12 GMT
Transfer-Encoding: chunked
Content-Type: text/xml;charset="utf-8"
X-Powered-By: Servlet/2.5 JSP/2.1
**打印回复详情 - 08:55:14.319
Servlet/2.5 JSP/2.1<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">...
在xml开始之前,文本“Servlet / 2.5 JSP / 2.1”与xml响应相关,但是,当我使用read_line im只获取read_line时,如何消除标题回应。
答案 0 :(得分:0)
为了从Web服务中读取更长的字符串,我使用以下代码:
l_http_request UTL_HTTP.REQ;
l_http_response UTL_HTTP.RESP;
BUFFER VARCHAR2(32767);
l_response_clob CLOB;
xml XMLTYPE;
BEGIN
...
l_http_response := UTL_HTTP.GET_RESPONSE(l_http_request);
DBMS_LOB.CREATETEMPORARY(l_response_clob, TRUE, DBMS_LOB.CALL);
DBMS_LOB.OPEN(l_response_clob, DBMS_LOB.LOB_READWRITE);
BEGIN
LOOP
UTL_HTTP.READ_TEXT(l_http_response, BUFFER, 32767);
DBMS_LOB.WRITEAPPEND(l_response_clob, LENGTH(BUFFER), BUFFER);
END LOOP;
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY THEN
UTL_HTTP.END_RESPONSE(l_http_response);
END;
DBMS_LOB.CLOSE(l_response_clob);
xml := XMLTYPE(l_response_clob);
... do whatever you need with XML docuemnt
DBMS_LOB.FREETEMPORARY(l_response_clob);
END;