簡體   English   中英

是否可以從服務器托管HTML和Javascript,但是可以通過我的本地網絡發送SOAP請求嗎?

[英]Is it possible to host HTML and Javascript from server, but have it send SOAP request over my local network?

我正在嘗試創建一個Web客戶端來控制我的Sonos揚聲器。 揚聲器連接到您的wifi,並充當各種流媒體服務的媒體服務器。
它通過對UPnP操作的SOAP發布請求進行操作。 我已經弄清楚了哪些SOAP請求可以做什么,但是我無法創建一個腳本來從Web瀏覽器控制它。

我學校的Web服務器使用Apache,並且我嘗試將以下行添加到腳本/網頁所在目錄的.htaccess文件中,但無濟於事:

Header set Access-Control-Allow-Origin "*"

用戶是否可以通過任何方式訪問該網站(即使該網站由第三方服務器托管),輸入其目標設備的IP地址以及將請求從用戶的IP發送到目標設備?

如果不是,可以在瀏覽器中本地運行此腳本,以便不涉及第三方服務器嗎? 這會使它起作用嗎? 如果是這樣,我將如何做這些事情之一?

這是我到目前為止的代碼:

<html>
<head>
    <title>SOAP JavaScript Client Test</title>
    <script type="text/javascript">
        function play() {
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open('POST', 'http://192.168.1.197:1400/', true);

            // build SOAP play request
            var play =

                'POST /MediaRenderer/AVTransport/Control HTTP/1.1' +
                'ORIGIN: '
                'HOST: 192.168.1.197:1400' +
                'SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Play"' +
                'CONTENT-TYPE: text/xml ; charset="utf-8"' +
                'Content-Length: 356' +
                '<?xml version="1.0" encoding="utf-8"?>' +
                '<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">' +
                   '<s:Body>' +
                      '<u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">' +
                         '<InstanceID>0</InstanceID>' +
                         '<Speed>1</Speed>' +
                      '</u:Play>' +
                   '</s:Body>' +
                '</s:Envelope>';

            xmlhttp.onreadystatechange = function () {
                if (xmlhttp.readyState == 4) {
                    if (xmlhttp.status == 200) {
                        alert('done. use firebug/console to see network response');
                    }
                }
            }
            // Send the POST request
            xmlhttp.setRequestHeader('Content-Type', 'text/xml');
            xmlhttp.send(play);
            // send request
            // ...
        }
    </script>
</head>

<body>
    <form name="Demo" action="" method="post">
        <div>
            <input type="button" value="Play" onclick="play();" />
        </div>
    </form>
</body>
</html>

嘗試運行控制台時,我從控制台收到以下錯誤:

XMLHttpRequest無法加載http://192.168.1.197:1400/ 對預檢請求的響應未通過訪問控制檢查:請求的資源上不存在“ Access-Control-Allow-Origin”標頭。 因此,不允許訪問來源“ http://cs12students.dce.harvard.edu ”。

我的想法是讓用戶輸入“設備IP:端口”,或以某種方式在網絡上發現它(不確定是否可行,似乎是某種安全隱患),為它分配一個變量,然后然后將其插入每個腳本以執行不同的操作。

有人已經在stackoverflow上遇到了您的問題,請鏈接到答案: https : //stackoverflow.com/a/24285136/6512354

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM