PL / SQL模拟表单POST

时间:2013-06-10 09:06:03

标签: database oracle stored-procedures plsql

我正在编写一个oracle过程来对某个URL发出请求。有了这个帖子请求,我必须发送一些表单变量。在API文档中,他们说他们在jquery + javascript中给出了示例。参见:

var variables = {
   username: "username", 
   password: "password"
};
var jsonString = JSON.stringify(variables);
jQuery.post(
    "https://sandbox.api.cso20.net/v1/jobapi/getApiKey.json", 
    {args: jsonString}, 
    function (data) {console.log(data);}
);

我知道如何使用utl_http在PL SQL中发出http请求,并为https设置钱包。但我现在设置的唯一标题是:

utl_http.set_header(r => l_req, name => 'User-Agent', value => 'Mozilla/4.0');

我理解表单信息应该以某种方式与帖子一起发送(标题或正文不确定)。但我真的可以使用一些帮助,因为我在互联网上找不到任何例子。我试过这个:

p_param_value = 'args={"username":"user","password":"pass"}';
l_param_length := length(p_param_value);
utl_http.set_header(r       =>   l_req,
                    name    =>   'Content-Length',
                    value   =>   l_param_length);

utl_http.write_text (r      =>   l_req,
                     data   =>   p_param_value);

但不幸的是,这不起作用。非常感谢任何帮助。

凯文

1 个答案:

答案 0 :(得分:4)

根据utl_http documentation,您必须在begin_request中指定POST方法:

req := UTL_HTTP.BEGIN_REQUEST (url=>the_url, method=>'POST');
UTL_HTTP.SET_HEADER (r      =>  req, 
                     name   =>  'Content-Type',   
                     value  =>  'application/x-www-form-urlencoded');
UTL_HTTP.SET_HEADER (r      =>   req, 
                     name   =>   'Content-Length', 
                     value  =>'  <length of data posted in bytes>');
UTL_HTTP.WRITE_TEXT (r      =>   req, 
                     data   =>   'p1 = value1&p2=value2...');
resp := UTL_HTTP.GET_RESPONSE (r => req);