2

BloggerAPI を使用して、Flickr から "blog this" 機能を pl/sql ベースの CMS に実装しようとしています。

Flickr から投稿トランザクションが送られてくると、HTTP トランザクションは次のようになります。

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 で応答しており、エラー メッセージは「署名の不一致または '=' がありません」であり、pl/sql プロシージャは要求を処理する機会がありません。メッセージを見ると、柔軟なパラメーターの受け渡しがうまくいかないのではないかと思いますが、他に方法がわかりません

利用可能なブログを取得するプロセスは正常に機能しているように見えますが、リクエストのコンテンツにはメッセージの一部としてすべての html エンティティが含まれていません。

    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 データを取得する方法はありますか? または私が見ている他のアプローチ?

ありがとう、マーク。

4

5 に答える 5

2

Oracle にサービス リクエストを開いたところ、mod_plsql が httpheader 変数の取得をサポートしていないことが確認されました。これが私がSRについて行った議論です:

問題の分析

確認する必要がありますが、これまでのマークの結論は正しいように見えます。つまり、MOD_PLSQL は常に PLSQL プロシージャを呼び出して処理しており、生の HTTP リクエストを読み取る方法はありません。MOD_PLSQL はリクエストを解析し、PLSQL プロシージャがあるかどうかをチェックするためこの名前と、渡す引数がある場合。渡す引数がなく、XML ドキュメントのようなものを提供している場合、MODPLSQL は戸惑い、実際にはそうではないのに、これがパラメーターと値の新しいペアであると考えます。

答え

いいえ、それはできません。なぜなら、MOD_PLSQL は、いくつかの引数を持つ PLSQL プロシージャ コールとして解析および変換できるパラメータを持つリクエストを処理するだけだからです。MOD_PLSQL には、java に HTTPRequest オブジェクトがあるのと同じように、リクエスト全体を含む「httprequest」変数の概念がありません。

問題の分析

MOD_PLSQL から読み取ることができないパラメーターとして渡さない限り、確認が取れました。言い換えれば、HTTP リクエスト本文で XML ページを渡す場合、リクエストを raw モードで処理できる Java のようなものを使用する必要があり、あらゆる種類の制限なしで任意の HTTP ヘッダーと http 本文を読み取ることができます。

于 2009-09-18T16:41:44.620 に答える
1

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

ここで、この記事で説明されているように、ファイル アップロードの手順を設定します: Web PLSQL を使用したファイル、アップロード、およびダウンロード

于 2009-11-18T16:48:27.427 に答える
0
于 2009-05-06T15:20:42.027 に答える
0

2 つのリクエストの唯一の大きな違いは、「Expect: 100-continue」ビジネスです。これは、クライアントがリクエストを 2 つに分割できるようにする HTTP 1.1 仕様の句のようです。基本的に、クライアントはヘッダーをサーバーに送信し、サーバーは選択を行う必要があります。ヘッダーに「満足」している場合、HTTP 100 応答を返し、残りのメッセージが受け入れられることを示します。

Flickr からデータを取得しているため、クライアントからの http 要求に対してどのレベルの制御を行っているかわかりません。サーバー側からは、Apache の構成を変更する必要があるか、mod_plsql のバグが "!" でポップアップしている可能性があります。柔軟なパラメータ マーカー。

いずれにせよ、現在のブロガー API はこのようなものではありません。おそらく、新しい GData API に移行する必要があります。

于 2009-08-19T21:28:56.487 に答える
0

UTL_HTTP を使用

UTL_HTTP パッケージを使用してこれを行うことができます。

UTL_HTTP.read_text(
   r     IN OUT NOCOPY resp,
   data  OUT NOCOPY VARCHAR2,
   len   IN PLS_INTEGER DEFAULT NULL);

「UTL_HTTP パッケージは、HTTP 1.1 チャンク転送エンコードをサポートしています。応答ヘッダーに示されているように、応答本文がチャンク転送エンコード形式で返されると、パッケージはチャンクを自動的にデコードし、チャンク解除形式で応答本文を返します。」

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

于 2009-01-17T00:09:11.403 に答える