PL/SQL utl_http obtenir xml
Je suis en train de mettre en œuvre très simple PL/SQL
procédure en mesure d'obtenir un xml
de fichiers à partir du web.
La PL/SQL
code est le suivant:
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;
/
J'ai construit avec succès la procédure par SQLPlus.
Cependant, lorsque j'essaie d'exécuter, je reçois le message d'erreur suivant:
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.
C'est bizarre que le fichier xml j'aimerais lire est la suivante:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<body>Don't forget me this weekend!</body>
</note>
Étant donné que le même code, sans le _ set_header_ functions
fonctionne très bien pour une normale de HTML
, fournir correctement de sa source de la page, svp quelqu'un pourrait-il m'expliquer pourquoi il ne fonctionne pas avec un simple xml
fichier?
Vous devez vous connecter pour publier un commentaire.
Pourquoi avez-vous mis le content-type et content-length dans votre demande ? Votre demande ne peut pas avoir tout le corps (entité de la demande). Ce n'est pas un POST.
Vous avez à faire cela pour la réponse.
http://www.mypage.com/testXML.xml
est celui qui va envoyer la réponse et définir les en-têtes de réponse. Votre code PL/SQL est juste l'envoi de la demande. Je pense que vous n'avez pas à définir des en-têtes de réponse dans votre code PL/SQL.Il apparaît à partir de votre question sur lkuty de la réponse que vous êtes à la recherche pour le Accepter en-tête. Cela informe le serveur de ce type(s) vous accepter dans la réponse.