1

私は、ウェブサイト用の他のプログラム用のインターフェースを必要とする c プログラムを作成しました。だから私は石鹸インターフェースを作成するために libcs​​oap を選択しました。libcs​​oap-library は、c で書かれた小さな http サーバーである nanohttpd に基づいています。

いくつかのテスト関数を実装しました。たとえば、ping興味深いデータなしで xml を返すだけの関数です。

これらの関数は、libcs​​oap を使用して問題なく呼び出すことができます。しかし今、ダミーの Web サイトから SOAP インターフェイスを呼び出そうとしています。テキストエリアとテキストエリアのコンテンツを生のxmlとして送信するためのボタンを含むhtmlファイルを作成しました。

div次に、-ボタンの隣に答えを入れようとしsendます。この html ファイルはxubuntu-02、Apache2 Web サーバー上のローカル マシンにあります。

コードは次のとおりです。

<HTML xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <HEAD>
    <TITLE>Debug Post</TITLE>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script type="text/javascript">
    function submit_data() {
        var src = document.getElementById('data');
        $.support.cors = true;

        $.ajax({
            url: 'http://xubuntu-02:10000/tbs_blabla',
            type: 'POST',
            async: false,
            timeout: 30000,
            data: src.value,
            success: function(data) {
                alert('OK!');
                /*document.getElementById('data').value = data;*/
            },
            fail: function() {
                alert('failed');
            }
        });
    }
    </script>
  </HEAD>
  <BODY>
    <H1>Debug Post</H1>
      <textarea id="data" rows="10" cols="80">
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header/> <SOAP-ENV:Body>  <m:ping xmlns:m="urn:tbs_blabla">  <m:name xsi:type="xsd:string">Jonny B. Good</m:name></m:ping> </SOAP-ENV:Body></SOAP-ENV:Envelope>

     </textarea>
      <p>
        <input type="button" value="Submit" onclick="submit_data();return false;" />
      </p>
    <p>
    <div id="res">
    </div>
    </p>
  </BODY>
</HTML>

クロムを使用してコードをデバッグします。すべての http 要求を監視できます。応答に対して常に http ステータス 200 を取得します。それで... リクエストは完了するはずですか?サーバー側のログ (libcs​​oap-log) を確認すると、xml が処理され、新しい xml が作成され、新しい xml が送信されたこともわかります。

また、wireshark でリクエストを確認しましたが、問題ないようです。

POST /tbs_blabla HTTP/1.1
Host: xubuntu-02:10000
Connection: keep-alive
Content-Length: 425
Accept: */*
Origin: http://xubuntu-02
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://xubuntu-02/test.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
DNT: 1

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header/> <SOAP-ENV:Body>  <m:ping xmlns:m="urn:tbs_blabla">  <m:name xsi:type="xsd:string">Jonny B. Good</m:name></m:ping> </SOAP-ENV:Body></SOAP-ENV:Envelope>

     HTTP/1.1 200 OK
Date: Sun, 10 Mar 2013 13:28:33 GMT
Server: Nano HTTPD library
Content-Type: text/xml
Content-Length: 417

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header/> <SOAP-ENV:Body>  <m:pingResponse xmlns:m="urn:tbs_blabla">  <m:ok xsi:type="xsd:boolean">true</m:ok></m:pingResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>

だから、すべてが良さそうに見えますが、JavaScriptコンソールのクロムでは常にXMLHttpRequest cannot load http://xubuntu-02:10000/tbs_blabla. Origin http://xubuntu-02 is not allowed by Access-Control-Allow-Origin..

常にリクエストを送信しますが、Web ページでは何も起こりません。

理由がわかりません。私は多くのことをテストしました。chromium-browser --disable-web-securityたとえば、またはでクロムを開始しchromium-browser --allow-file-access-from-filesます。

多くのstackoverflow-postsをチェックしました:

エラー: JQuery の ajax メソッドを使用して XML ファイルをロードすると、"Origin null は Access-Control-Allow-Origin では許可されません"

XmlHttpRequest エラー: Origin null は Access-Control-Allow-Origin で許可されていません

Origin null は Access-Control-Allow-Origin では許可されていません

$.ajax(): 元の null は許可されていません

jQuery Post を Google API に送信する Access-Control-Allow-Origin エラー

...

多分誰かが私が間違っていることを見ることができますか?

お手伝いありがとう。

よろしくお願いします

- 編集 -

PHPで小さな「プロキシ」を書きました。xml を受信して​​ localhost:10000 に送信し、xml-answer を返します。今、私はxmlのポストフィールドデータを使用しています.

これがphpファイルです:

<?php
echo shell_exec('curl http://localhost:10000/tbs_lgrow -m60 -d' . escapeshellarg($_POST['data']));
?>

これで、この小さなハックで動作します。

ありがとう

よろしくお願いします

4

0 に答える 0