烦恼一般都是想太多了。

0%

库路径

dialog(package.path)
dialog(package.cpath)
/data/data/?.lua;
/sdcard/TouchSprite/lua/?.lua;
/sdcard/TouchSprite/lua/?.luac;
/data/data/com.touchsprite.android/TouchSprite/?.lua;
/data/data/com.touchsprite.android/files/tslibs/?.lua;
/data/data/com.touchsprite.android/files/tslibs/?/?.lua;
/data/data/?.so;
/data/data/com.touchsprite.android/files/tslibs/?.so;
/data/data/com.touchsprite.android/files/plugin/?.so;
/data/data/?.so;
/sdcard/TouchSprite/lua/?.so;

关于http.post 文件

触动有三个地方提供了 http 相关的操作。

TSLib

local url = 'http://www.baidu.com'
data = "abcdbef",
options = {
tstab = 1,
timeOut = 10,
urlEnCode = true
}
local str = httpPost(url, data, options)

这个不能指定头部等内容

ts.so

这个就可以指定头部,和直接用 lua 表来进行作为参数了

iOS

local ts = require("ts")
header_send = {typeget = "iOS"}
body_send = {
["username"] = "aa",
["password"] = "1234"
}
ts.setHttpsTimeOut(60)
code, status_resp, body_resp = ts.httpsPost("https://www.baidu.com", header_send, body_send)

Android

--Android 脚本实例
local ts = require("ts")
data = {
tstab = "tstab",
header_send = {typeget = "android"},
body_send = {id = "687"},
format = "gbk"
}
code, header_resp, body_resp = ts.httpsPost("http://whois.pconline.com.cn/ip.jsp", data)

tsnet.so

这个高级库,需要购买VIP才能用,或者是IOS 专业版,放弃他。

require("tsnet")
status, header, content =
http.post(
"https://whois.pconline.com.cn/ip.jsp",
{
headers = {aaa = 123, cd = 12},
params = {aaa = 111, bbb = 222},
opts = {charset = "gbk"}
}
)

但这几个都没有解决一个问题:对于文件是如何处理的?是将文件直接传递文件描述符,还是需要手动进行转换成分段的形式进行传输呢?

问题的解决

tsnet.so

使用 ltn12, multipart-post 来解决。

multipart-post 用来将文件封装成 multipart 格式,然后调用 tsnet 的API进行上传:

require("tsnet")
local enc = (require "multipart-post").encode

function uploadfile(url, filepath)
local body, boundary = enc {file = {data = io.open(filepath)}}
local headers = {
["content-length"] = #body,
["content-type"] = string.format("multipart/form-data; boundary=%s", boundary)
}
print(body)
return http.post(
url,
{
headers = headers,
params = body,
opts = {charset = "gbk"}
}
)
end

status, header, content = uploadfile("http://oss.888ce.cn:8081/mz/oss/pic/upload/scriptImg", "1.png")
dialog(status)
dialog(content)

ts.so

require("ts")
local enc = (require "multipart-post").encode

function uploadfile(url, filepath)
local body, boundary = enc {file = {data = io.open(filepath)}}
local headers = {
typeget='android',
["content-length"] = #body,
["content-type"] = string.format("multipart/form-data; boundary=%s", boundary)
}

return ts.httpPost(
url,
{
tstab='tstab',
header_send = headers,
body_send = body,
format = 'gbk'
}
)
end

status, header, content = uploadfile("http://oss.888ce.cn:8081/mz/oss/pic/upload/scriptImg", "1.png")

这个是好久以前看 APUE 的时候就看过了,不过最近在用 Python 做服务的时候,想着如何让其也能如同其他程序一样在后台运行而不会随着终端的退出而终止呢。所以又回顾来看了一下 UNIX 的进程模型。

Read more »

说实话,本来是非常不想用 Python2 的,但是架不住服务器上大多都是自带的 Python2,而且还是内网环境,想要到处部署 Python3 的话,再加上装依赖的话,是比较麻烦的。所以不得不用。但是 Python2 的字符集处理也是非常让人头疼的内容。

Read more »