0

私は、サードパーティのプログラム (私のスクリプトで特定の関数を呼び出すいくつかの .exe) によってホストされる Lua スクリプトに取り組んでいます。必要な機能を実装するために (特定の情報を取得するために Web サービスに残りの呼び出しを行う)、 を使用したいと考えていますsocket.http.request

最初に、作成したい呼び出しのサンプル スクリプトを作成しました。

local io = require("io")
local http = require("socket.http")
local ltn12 = require("ltn12")

local data =  "some data")
local response = {}
socket.http.request({
    method = "POST",
    url = "http://localhost:8080/someServce/rest/commands/someCommand",
    headers = {
            ["Content-Type"] = "application/x-www-form-urlencoded",
            ["Content-Length"] = string.len(data)
        },
    source = ltn12.source.string(data),
    sink = ltn12.sink.table(response)
    })
print(table.concat(response))
print("Done")

これはうまくいきます。期待どおりの応答が得られます。サードパーティのホストからこれを実行しようとすると、最初にエラーが発生しました。

 module 'socket.http' not found:
    no field package.preload['socket.http']
    no file '.\socket\http.lua'
    no file 'D:\SomeFolder\lua\socket\http.lua'
    no file 'D:\SomeFolder\lua\socket\http\init.lua'
    no file 'D:\SomeFolder\socket\http.lua'
    no file 'D:\SomeFolder\socket\http\init.lua'
    no file 'C:\Program Files (x86)\Lua\5.1\lua\socket\http.luac'
    no file '.\socket\http.dll'
    no file 'D:\SomeFolder\socket\http.dll'
    no file 'D:\SomeFolder\loadall.dll'
    no file '.\socket.dll'
    no file 'D:\SomeFolder\socket.dll'
    no file 'D:\SomeFolder\loadall.dll'

ソケット フォルダーを LUA フォルダーからホストが実行されているフォルダー (D:\SomeFolder) にコピーしようとしました。次に、モジュールを見つけますが、別のエラーでロードに失敗します:

loop or previous error loading module 'socket.http'

また、require ステートメントを関数の外に移動してグローバルにしようとしました。これにより、さらに別のエラーが発生します。

 module 'socket.core' not found:
    no field package.preload['socket.core']
    no file '.\socket\core.lua'
    no file 'D:\SomeFolder\lua\socket\core.lua'
    no file 'D:\SomeFolder\lua\socket\core\init.lua'
    no file 'D:\SomeFolder\socket\core.lua'
    no file 'D:\SomeFolder\socket\core\init.lua'
    no file 'C:\Program Files (x86)\Lua\5.1\lua\socket\core.luac'
    no file 'C:\Program Files (x86)\Lua\5.1\lua\socket\core.lua'
    no file '.\socket\core.dll'
    no file 'D:\SomeFolder\socket\core.dll'
    no file 'D:\SomeFolder\loadall.dll'
    no file '.\socket.dll'
    no file 'D:\SomeFolder\socket.dll'
    no file 'D:\SomeFolder\loadall.dll'

次に、core.dll をソケットから D:\SomeFolder フォルダーにコピーしようとしましたが、別のエラーが発生しました。

error loading module 'socket.core' from file '.\socket\core.dll':
    %1 is not a valid Win32 application.

今、私は立ち往生しています。完全に間違ったことをしているに違いないと思いますが、このような問題を修正する方法についての適切な説明が見つかりません。誰でも私を助けることができますか?

4

2 に答える 2

1

おそらく、次のフォルダー構造が必要です (D:\SomeFolderフォルダーに対して)。

socket.lua
socket/core.dll
socket/http.lua
socket/url.lua
socket/<any other file from socket folder required by http.lua>

この構成をテストしたところ、うまくいきました。

モジュール 'socket.http' をロードしているループまたは以前のエラー

これは通常、ファイル自体socket.httpからの読み込みが原因です。socket/http.lua

于 2013-09-23T16:56:35.473 に答える