2

我正在编写一个 oracle 程序来向某个 URL 发出 post 请求。有了这个帖子请求,我必须发送一些表单变量。在 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');

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

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);

但不幸的是,这不起作用。任何帮助是极大的赞赏。

凯文

4

1 回答 1

4

根据utl_http 文档,您必须在 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);
于 2013-06-10T09:22:01.050 回答