PL / SQL utl_http получить XML - PullRequest
       0

PL / SQL utl_http получить XML

0 голосов
/ 27 октября 2011

Я пытаюсь реализовать очень простую PL/SQL процедуру, способную получить файл xml из Интернета.

Код PL/SQL следующий:

SET serveroutput ON SIZE 40000
set escape on

create or replace procedure testProc as 

url   VARCHAR2(256) := 'http://www.mypage.com/testXML.xml';

req   sys.utl_http.req;
resp  sys.utl_http.resp;
txt   VARCHAR2(100); 

begin
  req := sys.utl_http.begin_request(url,'GET','HTTP/1.0'); 
  utl_http.set_header(req, 'content-type', 'text/xml;charset=UTF-8');   
  utl_http.set_header(req, 'content-length', length(txt));
  resp := sys.utl_http.get_response(req);

  LOOP
    sys.utl_http.read_line(resp, txt, TRUE);
    dbms_output.put_line(txt);
  END LOOP;
  sys.utl_http.end_response(resp);

EXCEPTION WHEN sys.utl_http.end_of_body THEN
sys.utl_http.end_response(resp);

end testProc;
/

Я успешно построил процедуру с помощью SQLPlus. Однако, когда я пытаюсь выполнить его, я получаю следующую ошибку:

SQL> exec testProc;
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>413 Request Entity Too Large</title>
</head><body>
<h1>Request Entity Too Large</h1>
The requested resource<br />/trentad/testXML.xml<br />
does not allow request data with GET requests, or the amount of data provided in
the request exceeds the capacity limit.
</body></html>

PL/SQL procedure successfully completed.

Это странно, поскольку XML-файл, который я хотел бы прочитать, следующий:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
    <body>Don't forget me this weekend!</body>
</note>

Учитывая, что тот же самый код без _ set_header_ functions работает нормально для обычного HTML, правильно предоставляя исходную страницу, кто-нибудь может объяснить, почему он не работает с простым xml файлом?

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

Почему вы задаете тип контента и длину контента в вашем запросе GET? Ваш запрос GET не может иметь никакого тела (объекта запроса). Это не ПОЧТА.

utl_http.set_header(req, 'content-type', 'text/xml;charset=UTF-8');   
utl_http.set_header(req, 'content-length', length(txt));

Вы должны сделать это для ответа.

0 голосов
/ 09 ноября 2015

Из вашего вопроса в ответе lkuty следует, что вы ищете заголовок Accept .Это сообщает серверу, какой тип (типы) вы примете в ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...