如何将此curl命令翻译成lua?
2014-6-20 22:32:40
收藏:0
阅读:115
评论:1
我在远程服务器上有一个能运行的.php文件。如果我运行下面的代码:
curl -F "USER=user" -F "PASS=pass" -F "TIME=12345" -F "EMAIL=email@email.com" http://myurl.com/create.php
它会返回:
{"PASS":"pass", "USER":"user"}
然而,我正在尝试使用相同的代码,只是用lua编写的新接口,虽然它确实与服务器联系了,但它也返回“无效请求”。我已经设置了.php,如果没有设置正确的POST值,就返回“无效请求”。
我编辑了.php,以返回接收到的任何输入,它回复到:
{"PASS":null, "USER":null}
我的.php代码通常如下:
if (isset($_POST["USER"]) && isset($_POST["PASS"]) && isset($_POST["TIME"]) && isset($_POST["EMAIL"])){
[...]do stuff[...]
} else{
sendResponse('Invalid request');
}
和lua代码:
require "socket.http"
function curlCreate()
response= socket.http.request("http://myurl.com/create.php","USER=user", "PASS=pass", "TIME=12345", "EMAIL=emaiil@email.com")
print(response)
end
我相信这可能是-F标志保留了lua传输,但是关于lua curl的文档有点稀少和旧。
提前感谢任何建议!
答案细节: 第一个推荐的方法...
response= socket.http.request("http://someurl.com", "USER=user&PASS=pass&TIME=12345&EMAIL=email@email.com")
...的确有用!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
在
curlCreate中,你的request调用格式有误。request的字符串参数形式接受一个或两个参数,先是 URL,然后是请求体。在 HTTP 中,传递各种参数设置的一种方式是使用 "&" 符号连接它们,因此您可以将调用的第二个参数(请求体)尝试为:"USER=user&PASS=pass&TIME=12345&EMAIL=email@email.com"我怀疑甚至这也不会起作用。curl 的 -F 选项还会设置内容类型报头(为 "multipart/form-data"),许多 Web 应用程序会查找该报头以验证请求,但我不知道这是否与 PHP 有关。要设置标头,您需要将参数映射传递给
request,这更复杂,因为映射参数形式是更一般的较低级别工具。像这样:local http = require "socket.http" local ltn12 = require "ltn12" function postForm(url, body) local sink, responseData = ltn12.sink.table() local responseCode, statusCode, headers, statusLine = http.request { url = url, method = "POST", headers = { ["Content-Type"] = "application/x-www-form-urlencoded", ["Content-Length"] = #body -- this header might not be necessary }, source = ltn12.source.string(body), sink = sink } return table.concat(responseData), responseCode, -- etc. end(
request(url, body)的实现必须看起来类似于此。)请注意,在此示例中,Content-Type 不是 "multipart/form-data":请参阅此问题 下的解释。