首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过HTTP Post事务处理将XML检索到Oracle PL/SQL中?

如何通过HTTP Post事务处理将XML检索到Oracle PL/SQL中?
EN

Stack Overflow用户
提问于 2009-01-16 23:57:18
回答 5查看 10.7K关注 0票数 2

我正在尝试使用我的基于pl/sql的内容管理系统的BloggerAPI从Flickr实现"blog this“功能。

当Flickr向我发送posting事务时,HTTP事务如下所示:

代码语言:javascript
运行
复制
POST /pls/website/!pkg.procAPI HTTP/1.1
Host: www.mydomain.com
Accept: */*
User-Agent: Flickr
Content-Type: text/xml; charset=utf-8
Content-Length: 1220
Expect: 100-continue

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
    <methodName>blogger.newPost</methodName>
    <params>
        <param><value><string>NO_APP_KEY</string></value></param>
        <param><value><string>1</string></value></param>
        <param><value><string>markj</string></value></param>
        <param><value><string>markj</string></value></param>
        <param><value><string>This is a test post from &lt;a href=&quot;http://www.flickr.com/r/testpost&quot;&gt;&lt;img alt=&quot;flickr&quot; src=&quot;http://www.flickr.com/images/flickr_logo_blog.gif&quot; width=&quot;41&quot; height=&quot;18&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; /&gt;&lt;/a&gt;, a fancy photo sharing thing.</string></value></param>
        <param><value><boolean>1</boolean></value></param>
    </params>
</methodCall>

但是我的服务器正在响应一个HTTP-400 Bad request,错误消息是"Signature Mismatch or Missing '='“,并且我的pl/sql过程从来没有机会处理这个请求。我怀疑灵活的参数传递在查看消息时被冲淡了,但我不知道还能怎么做

获取可用博客的过程似乎运行正常,但是请求的内容并不包含所有的html实体作为消息的一部分:

代码语言:javascript
运行
复制
    POST /pls/website/!pkg.procAPI HTTP/1.1
Host: www.mydomain.com
Accept: */*
User-Agent: Flickr
Content-Type: text/xml; charset=utf-8
Content-Length: 304

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
    <methodName>blogger.getUsersBlogs</methodName>
    <params>
        <param><value><string>NO-APP-KEY</string></value></param>
        <param><value><string>mark</string></value></param>
        <param><value><string>markj</string></value></param>
    </params>
</methodCall>

有没有一种方法可以直接从http请求的主体中获取xml数据?或者是我忽略的其他方法?

谢谢,马克。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-09-18 16:41:45

我向Oracle提交了一个服务请求,他们确认mod_plsql不支持检索httpheader变量。这是我在SR上的讨论:

问题分析

我需要确认这一点,但是Mark结论在我看来是正确的,即MOD_PLSQL总是调用和处理PLSQL过程,并且没有办法读取原始的HTTP请求,因为MOD_PLSQL解析请求并检查是否存在具有该名称的PLSQL过程,以及是否有要传递的参数。如果没有要传递的参数,但我们提供了其他内容,比如XML文档,则MODPLSQL会感到困惑,并认为这是一对新的参数和值,而事实并非如此。

回答

不,这是不可能的,因为MOD_PLSQL只处理带有参数的请求,这些参数可以被解析和转换为带有几个参数的PLSQL过程调用。MOD_PLSQL没有像HTTPRequest对象那样包含整个请求的"httprequest“变量的概念

问题分析

除非我们将其作为参数传递,否则无法从MOD_PLSQL中读取它。换句话说,如果我们在HTTP请求主体中传递XML页面,我们需要使用类似java的东西,我们可以在raw模式下处理请求,并且我们可以读取任何HTTP头部和http主体,而不受任何类型的限制。

票数 2
EN

Stack Overflow用户

发布于 2009-11-19 00:48:27

xml可以作为文件附件发送吗?换句话说,改变:

Content-Type: text/xml; charset=utf-8

Content-Type: multipart/form-data, boundary=AaB03x

然后在xml之前添加以下内容:

--AaB03x content-disposition: form-data; name="xmlfile"; filename="myfile.xml"

Content-Type: text/xml

下面是xml之后的内容:

--AaB03x--

现在,您设置了文件上载的过程,如本文所述:Files, Uploads, and Downloads with Web PLSQL

票数 1
EN

Stack Overflow用户

发布于 2009-01-17 00:09:11

使用UTL_HTTP

您可以使用UTL_HTTP包来完成此操作。

代码语言:javascript
运行
复制
UTL_HTTP.read_text(
   r     IN OUT NOCOPY resp,
   data  OUT NOCOPY VARCHAR2,
   len   IN PLS_INTEGER DEFAULT NULL);

“UTL_HTTP包支持HTTP1.1分块传输编码,当响应头中指示的响应body以分块传输编码格式返回时,包会自动解码分块,并以去分块格式返回响应body。”

http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96612/u_http.htm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/452475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档