搜索
查看: 1435|回复: 8

curl发送中文路径文件失败,英文的可以

[复制链接]

12

主题

38

帖子

317

积分

二级会员

Rank: 3Rank: 3

积分
317
发表于 2017-10-18 16:44:20 | 显示全部楼层 |阅读模式
看到Jacen.He的更新说明,模拟表单递交解决服务器gbk编码的问题,突然记得上次用curl上传中文路径的文件,服务器收不到,英文的路径能正确上传到服务器。代码也是Jacen.He在论坛的(版主的代码指引我的方向,文科生对太深奥的代码真心搞不懂,看不明白,要学会aar就是先学会看代码)。

import curl;
var http = curl.easy();
http.setOpt( 0x2712/*_CURLOPT_URL*/ ,weburl)

//设置上传表单
http.setPostForm(
        filename=fname;
        file="@"++filepath;  //文件路径首字符为@
)

当时的想法肯定是curl应该有点问题,国外的东西对中文不友好,当时我是这样解决的:
     var han=panduan(filepath)   
      if(han=="汉字"){  
            var snedfname=inet.url.encode(fname)
           fsys.copy(filepath,"/public/temp/"++snedfname)

           filepath="/public/temp/"++snedfname
        }
如果判断路径包含汉字,就拷贝到程序目录,然后发送,对于中文部分也做了下encode,服务器decode,问题倒是解决了,但是解决得很不甘心,不知道你们碰到过没有这个现象,是怎么解决的。
回复

使用道具 举报

12

主题

38

帖子

317

积分

二级会员

Rank: 3Rank: 3

积分
317
 楼主| 发表于 2017-10-18 16:46:54 | 显示全部楼层
为什么拷贝到程序目录,是因为,encode路径后,curl居然找不到,不发送数据。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-18 21:02:07 | 显示全部楼层
也不是国外的东西都对中文不友好,现在很多组件都是UTF8编码,支持中文很轻松,
象sqlite,htmlayout这些都完美的支持UTF8.

curl 文件路径要使用ANSI编码,而aardio是UTF8,转换一下就可以,我刚才已经改过了。
我一般用这个很少,在aardio里这些东西不如  web.rest.client ,inet.http 这些方便,我刚才试了一下我昨天用web.rest.client写的代码,这个curl又识别不出GBK网站提交上去是乱码,遇到这些问题就是自己先转换一下。

像这些代码,用curl多麻烦:

import console;
import web.rest.client;
import string.html;

var http = web.rest.client();
http.api(
"https://oa.tongda2000.com/logincheck.php").post(
     UNAME=
"lijia";
     encode_type=1;
);

http.sendMultipartForm( {
        TO_ID =
"912";
        TO_NAME =
"王征";
        SUBJECT =
"测试邮件标题!";
        SEND_FLAG = 1;
        SMS_REMIND =
"on";
        FROM_WEBMAIL =
"abc@263.net";
        TD_HTML_EDITOR_CONTENT=
/*测试邮件内容*/
    }
    ,
function(str,sendSize,contentLength){
        console.log(
"正在向服务器提交数据",math.size64(sendSize).format() );
    }
);

var html = http.api("https://oa.tongda2000.com/general/email/new/submit.php").post()
console.log( string.html.toText(html) );
console.pause(
true);


回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-18 21:06:52 | 显示全部楼层
可以升级下curl扩展库,curl组件升级到了最新版(7.56),那个文件路径的问题已处理好。

回复

使用道具 举报

12

主题

38

帖子

317

积分

二级会员

Rank: 3Rank: 3

积分
317
 楼主| 发表于 2017-10-18 22:16:13 | 显示全部楼层
当时情况是这样,webkit有个麻烦,就是不支持js的httpxml上传,要做进度条,所以只好用arr来接管上传和进度条,我没找到MultipartForm上传的发送多少数据的回调,找了论坛也没看到类似function(str,sendSize,contentLength)代码,正好curl有个http.onProgress,正好你也有个例子,就直接套上去了。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-18 22:23:55 | 显示全部楼层
bjtv 发表于 2017-10-18 22:16
当时情况是这样,webkit有个麻烦,就是不支持js的httpxml上传,要做进度条,所以只好用arr来接管上传和进度 ...
web.multipartFormData 上传并回调显示进度的,
aardio开始页的推荐入门教程《使用 web.rest 调用 REST API》 里就有。

这些教程不用找的,我一直推荐大家多看看,所以一直放在开始页。
web.rest.client的上传进度是通过 inet.http实现,web.rest.client的源代码不多可以看的。

回复

使用道具 举报

12

主题

38

帖子

317

积分

二级会员

Rank: 3Rank: 3

积分
317
 楼主| 发表于 2017-10-18 22:34:42 | 显示全部楼层
当时看了这个例子,

import console;
import web.rest.client;

var http = web.rest.client();
http.sendMultipartForm( {
        file = "@d:\文件路径";
        username = "测试";
    },function(str,sendSize,contentLength){
        console.log("正在上传",sendSize,contentLength);
    }
);
var str =http.post("http://eu.httpbin.org/post")
console.pause(,str)

其实是照抄用的,但是发送文件失败了,也许是服务器的问题,只有curl成功了。我知道是我的问题,但是总得找个解决办法,不过现在选择多了,这个进步是巨大的,对我们这样撞撞跌跌的入门者而言,那就是福音。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-18 23:04:03 | 显示全部楼层
bjtv 发表于 2017-10-18 22:34
当时看了这个例子,

import console;


我刚刚测试curl,multipart/form-data上传不行,
因为setPostForm以后,post函数里的代码覆盖掉了multipart/form-data头,
这个问题我已经修改过了,可能是curl新版才会这样。

web.rest.client 也是在不断的改进的,发数据包失败,可以找个抓包软件检查一下具体的原因,例如Wireshark。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-18 23:05:13 | 显示全部楼层
你说的没错,多个选择总是好的,所以我也封装了curl这些,并且不断的改进。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-23 10:09 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表