Paweł Nowicki

Paweł Nowicki Oracle Developer

Temat: UTL_HTTP i wartości POST

Witam,

Mam problem, prawdopodbnie błahy, ale szukanie rozwiązania w necie już mnie zniechęciło.
Opis:
Utworzyłem 'stronę' kod 1, która wyświetla parametry przekazane przez http metodą POST.
Kontrolnie kod sprawdzam formularzem kod 2.
Problem polega na tym, że potrzebuję działanie odwzorować w PL/SQL. Wykorzystuję kod 3, który działa na pakiecie UTL_HTTP. Łączę się ze stroną i pobieram jej zawartość. Wynik nie zawiera parametrów POST, które prawdopodbnie źle przekazuję. Przekazuję je poprzez utl_http.write_text(req, content), gdzie content - to pary parametr=wartość.

Proszę o pomoc. Jak przesłać, poprawić kod, aby przekazywał wartości do tablicy POST.

Kod 1 (php):
<?php
echo "połaczenie nawiązane\n<br/>drukowanie tablicy POST:\n<br/><br/>";

foreach ($_POST as $key => $entry)
{
if(is_array($entry)){
print $key . ": " . implode(',',$entry) . "<br>";
}
else {
print $key . ": " . $entry . "<br>";
}
}
?>


Kod 2 (html):

<form name="input" action="http://adres_strony" method="post">
Parametr: <input type="text" name="parametr" />
<input type="submit" value="Submit" />
</form>


Kod 3 (pl/sql utl_http):

declare

req utl_http.req;
res utl_http.resp;
url varchar2(4000) :=
'http://adres_strony';

name varchar2(4000);
buffer varchar2(4000);

content varchar2(1000) := 'parametr=wartosc';--||'&'||'parametr2=wartosc2';

begin

req := utl_http.begin_request(url, 'POST',' HTTP/1.1');
utl_http.set_header(req, 'user-agent', 'mozilla/4.0');
utl_http.set_header(req, 'content-type', 'text/html');
utl_http.set_header(req, 'Content-Length', length(content));


utl_http.write_text(req, content);

dbms_output.put_line('Przekazano dane: '||content);


res := utl_http.get_response(req);

begin



loop
utl_http.read_line(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;
end;
/

konto usunięte

Temat: UTL_HTTP i wartości POST

Znalazłem coś co dawno temu uruchamiałem, ale działa do tej pory, może Ci się przyda

Generalnie różni się w ustawieniach parametru content-type



l_http_req utl_http.req;
l_http_resp utl_http.resp;


-- Ask UTL_HTTP not to raise an exception for 4xx and 5xx status codes,
-- rather than just returning the text of the error page.
utl_http.set_response_error_check(false);



-- Begin the post request -- p_url_in == wstaw urla
l_http_req := utl_http.begin_request(p_url_in, 'POST');

-- Set the HTTP request headers
utl_http.set_header(l_http_req, 'User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)');
utl_http.set_header(l_http_req, 'content-type', 'application/x-www-form-urlencoded; charset=windows-1250');
utl_http.set_header(l_http_req, 'content-length', length(content));


-- Write the data to the body of the HTTP request
utl_http.write_line(l_http_req, content);

-- Process the request and get the response.
l_http_resp := utl_http.get_response(l_http_req);


utl_http.end_response(l_http_resp);


contenet mam w postaci:
content varchar2(1000) := 'msgType=' || msgtype || '&'||'sidname=' || sidname || '&'||'action=close';Paweł Idczak edytował(a) ten post dnia 12.04.12 o godzinie 20:38
Paweł Nowicki

Paweł Nowicki Oracle Developer

Temat: UTL_HTTP i wartości POST

Dziękuję. Rozwiązanie kryło się w Twoim kodzie.

Miałem:
utl_http.set_header(req, 'content-type', 'text/html');

A powinno być:
utl_http.set_header(req, 'content-type', 'application/x-www-form-urlencoded; charset=windows-1250');

Następna dyskusja:

10g UTL_MAIL + autentykacja...




Wyślij zaproszenie do