我正在制作一个包含两个独立HTTP请求的存储过程。第一个获取身份验证令牌,第二个使用该令牌。
第一个请求可以正常工作,我可以取回令牌。
第二个请求抛出ora-29259输入到达结束异常。除了URL之外,它们看起来完全一样:
begin
req := utl_http.begin_request(url,'POST',utl_http.http_version_1_1);
utl_http.set_header(req, 'Authorization', Token/Credentials);
utl_http.set_header(req, 'Content-Type', 'application/json');
utl_http.set_header(req, 'Content-Length', length(content));
utl_http.write_text(req, content);
res := utl_http.get_response(req);
loop
utl_http.read_text(res, buffer);
dbms_output.put_line(buffer);
end loop;
utl_http.end_response(res);
exception
when utl_http.end_of_body then
utl_http.end_response(res);
end;
我在近3年前发现了这个建议,建议更新数据库。我使用的是Oracle Database 11g Enterprise Edition 11.2.0.4.0-64位生产版,这是问题所在吗?我自己在谷歌上找不到任何答案。
第一个网站使用TLS 1.2,而第二个使用TLS 1.3,我的Oracle版本太旧了吗?
请提供您的代码示例以获得更详细的答案。
但是查看您提供的链接,我已经可以看到代码中缺少了一些内容,这是utl_http.end_of_body
的例外。
这是我的代码的一个例子,我在其他地方使用过:
begin
req := utl_http.begin_request(url,'POST',utl_http.http_version_1_1);
utl_http.set_header(req, 'Content-Type', 'application/xml;charset=UTF-8');
utl_http.set_header(req, 'Content-Length', length(content));
utl_http.write_text(req, content);
res := utl_http.get_response(req);
loop
utl_http.read_text(res, buffer);
dbms_output.put_line(buffer);
end loop;
utl_http.end_response(res);
exception
when utl_http.end_of_body then
utl_http.end_response(res);
end;