搜索
123
返回列表 发新帖
楼主: Jacen.He

[扩展库] curl扩展库范例

    [复制链接]

17

主题

50

帖子

436

积分

二级会员

Rank: 3Rank: 3

积分
436
发表于 2017-10-19 09:25:14 | 显示全部楼层
本帖最后由 hatesky 于 2017-10-19 09:39 编辑

  1. import console;
  2. import string.html;
  3. import curl;

  4. var http = curl.easy();//创建客户端
  5. http.setCookieFile("/cookies");//随便写一个

  6. //提交登录表单(application/x-www-form-urlencode格式)
  7. http.post("http://oa.tongda2000.com/logincheck.php",{
  8.      UNAME="lijia";
  9.      encode_type=1;
  10. });

  11. //设置上传表单(multipart/form-data格式)
  12. http.setPostForm(  
  13.     TO_ID = "912";
  14.     TO_NAME = "王征";
  15.     SUBJECT = "测试邮件标题!";
  16.     SEND_FLAG = 1;
  17.     SMS_REMIND = "on";
  18.     FROM_WEBMAIL = "abc@263.net";
  19.     TD_HTML_EDITOR_CONTENT= /*测试邮件内容*/ ;
  20. );

  21. var html = http.post("http://oa.tongda2000.com/general/email/new/submit.php")
  22. console.log( html,string.html.toText(html) );
  23. console.pause(true);
复制代码


Jacen,在我工作的OA系统上,以下的两种方法都成功了,用上边的方法,登陆这一步就没成功,Fiddler也抓不到包

方法一:
  1. import crypt.bin;
  2. import web.json;
  3. import inet.http;
  4. import string.html;

  5. var http = inet.http();

  6. var pUrl = "http://ip/logincheck.php";
  7. var pData = ..string.concat("UNAME=",..inet.url.encode("姓名",false),"&PASSWORD=",crypt.bin.encodeBase64("pwd"),"&encode_type=1");
  8. html = http.post(pUrl,pData);
  9. html = http.get("http://ip/general/email/get_count.php");
  10. var arr = web.json.parse(html);
  11. console.varDump(arr);

  12. pUrl = "ip/general/email/new/submit.php";

  13. import web.multipartFormData
  14. var formData = web.multipartFormData();
  15. formData.codePage = 936;
  16. formData.add("TO_ID","2091");
  17. formData.add("TO_NAME","姓名");
  18. formData.add("SUBJECT","主主题题");
  19. formData.add("TD_HTML_EDITOR_CONTENT","内容内容内容内容");
  20. formData.add("SEND_FLAG","1");
  21. formData.add("SMS_REMIND","on");
  22. var header = web.joinHeaders({
  23.         ["Referer:"] = "http://ip/general/email/new/";
  24.         ["Content-Type:"] = formData.contentType();
  25. });

  26. html = http.post(pUrl,formData.readAll(),header);
  27. console.log(string.html.toText(html))

  28. http.close();
  29. console.pause(true);
复制代码



方法二:
  1. import console;

  2. import crypt.bin;
  3. import web.rest.client;
  4. import string.html;

  5. var http = web.rest.client();
  6. http.charset="gbk"
  7. http.api("http://ip/logincheck.php").post(
  8.      UNAME="姓名";
  9.      PASSWORD=crypt.bin.encodeBase64("pwd");
  10.      encode_type=1;
  11. );

  12. http.sendMultipartForm( {
  13.         TO_ID = "2091";
  14.         TO_NAME = "姓名";
  15.         SUBJECT = "测试邮件标题!";
  16.         SEND_FLAG = 1;
  17.         SMS_REMIND = "on";
  18.         FROM_WEBMAIL = "abc@263.net";
  19.         TD_HTML_EDITOR_CONTENT= "测试邮件内容";
  20.     }
  21.     ,function(str,sendSize,contentLength){
  22.         console.log("正在向服务器提交数据",math.size64(sendSize).format() );
  23.     }
  24. );

  25. var html = http.api("http://ip/general/email/new/submit.php").post()
  26. console.log( string.html.toText(html) );

  27. console.pause(true);
复制代码





回复

使用道具 举报

17

主题

50

帖子

436

积分

二级会员

Rank: 3Rank: 3

积分
436
发表于 2017-10-19 10:16:29 | 显示全部楼层
hatesky 发表于 2017-10-19 09:25
Jacen,在我工作的OA系统上,以下的两种方法都成功了,用上边的方法,登陆这一步就没成功,Fiddler也抓不 ...
  1. http.post("http://ip/logincheck.php",..string.concat("UNAME=",..inet.url.encode("姓名",false),"&PASSWORD=",crypt.bin.encodeBase64("pwd"),"&encode_type=1"))
复制代码

这样子可以登陆,但中文乱码,看curl库,没找到可以设置编码的方法

  1. http.post("http://oa.tongda2000.com/logincheck.php",{
  2.      UNAME="lijia";
  3.      encode_type=1;
  4. });
复制代码

用这个我的OA无法登陆成功

是不是编码的问题?
回复

使用道具 举报

187

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14023
 楼主| 发表于 2017-10-19 12:03:47 | 显示全部楼层
hatesky 发表于 2017-10-19 10:16
这样子可以登陆,但中文乱码,看curl库,没找到可以设置编码的方法

对于GBK网站。curl没办法识别和转换编码,参数自己先转换为gbk的UrlEncode等等,字符串自己先转换。

即然你用 web.rest, inet.http 都搞定了,curl这个网站搞不定就算了呗。
回复

使用道具 举报

17

主题

50

帖子

436

积分

二级会员

Rank: 3Rank: 3

积分
436
发表于 2017-10-19 12:07:26 | 显示全部楼层
Jacen.He 发表于 2017-10-19 12:03
对于GBK网站。curl没办法识别和转换编码,参数自己先转换为gbk的UrlEncode等等,字符串自己先转换。

...

好的,谢谢
回复

使用道具 举报

3

主题

8

帖子

54

积分

一级会员

Rank: 2

积分
54
发表于 2017-10-28 13:02:33 | 显示全部楼层
这几天是不是有更新这个库呀?我代码都没动过,突然出问题了,是微信公众号的接口,应该没那麽容易变吧?一直返回 证书出错,重新下载, 我已经重下过了,现在搞不懂哪里错了

http.setOpt( 0x40/*_CURLOPT_SSL_VERIFYPEER*/ , false)
http.setOpt( 0x51/*_CURLOPT_SSL_VERIFYHOST*/ , false)

http.setOpt( 0x2766/*_CURLOPT_SSLCERTTYPE*/ ,"PEM")
console.debug("_CURLOPT_SSLCERT", http.setOpt( 0x2729/*_CURLOPT_SSLCERT*/ ,p1))
       
http.setOpt( 0x2768/*_CURLOPT_SSLKEYTYPE*/ ,"PEM")
console.debug("_CURLOPT_SSLKEY", http.setOpt( 0x2767/*_CURLOPT_SSLKEY*/ ,p2))

设置都是返回true,实在是不知道哪里环节错了
回复

使用道具 举报

187

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14023
 楼主| 发表于 2017-10-28 13:06:36 | 显示全部楼层
xfwsj 发表于 2017-10-28 13:02
这几天是不是有更新这个库呀?我代码都没动过,突然出问题了,是微信公众号的接口,应该没那麽容易变吧?一 ...

最近几天没有更新过,
十天前有更新过,curl组件升级到官网最新版本,

有问题,请提供可测试,可重现问题的代码。
回复

使用道具 举报

3

主题

8

帖子

54

积分

一级会员

Rank: 2

积分
54
发表于 2017-10-28 13:59:10 | 显示全部楼层
  1. import console;
  2. import curl;
  3. curl_post_ssl = function(url1, pd1){
  4.         var http = curl.easy();//创建客户端
  5.         var result;
  6.        
  7.                 //证书
  8.         var p1 = //apiclient_cert.pem
  9.         p1 = io.exist(p1) : ""
  10.         var p2 = //apiclient_key.pem
  11.         p2 = io.exist(p2) : ""
  12.         var p3 = //rootca.pem
  13.         p3 = io.exist(p3) : ""
  14.         /*
  15.         var p1 = //C:\Users\Administrator\Desktop\cert\apiclient_cert.pem
  16.         var p2 = //C:\Users\Administrator\Desktop\cert\apiclient_key.pem
  17. */
  18.         //p1,p2 = "",""
  19.         console.log("p1", p1, p2, p3)
  20.        
  21.         //超时时间
  22.         http.setOpt( 0xD/*_CURLOPT_TIMEOUT*/ , 10);
  23.        
  24.        

  25.         //设置选项
  26.         http.setOpt( 0x2712/*_CURLOPT_URL*/,url1 ) //设置URL
  27.         http.setOpt( 0x40/*_CURLOPT_SSL_VERIFYPEER*/ , false)
  28.         http.setOpt( 0x51/*_CURLOPT_SSL_VERIFYHOST*/ , false)
  29.         //console.debug("setCaInfo",http.setCaInfo(p3));

  30.         http.setOpt( 0x2766/*_CURLOPT_SSLCERTTYPE*/ ,"PEM")
  31.         console.debug("_CURLOPT_SSLCERT", http.setOpt( 0x2729/*_CURLOPT_SSLCERT*/ ,p1))
  32.        
  33.         http.setOpt( 0x2768/*_CURLOPT_SSLKEYTYPE*/ ,"PEM")
  34.         console.debug("_CURLOPT_SSLKEY", http.setOpt( 0x2767/*_CURLOPT_SSLKEY*/ ,p2))
  35.        
  36.        
  37.        
  38.        
  39.         //http.setOpt( 0x2A/*_CURLOPT_HEADER*/,1 );//回写HTTP头      
  40.         http.setOpt( 0x2F/*_CURLOPT_POST*/ ,1)
  41.         //http.setOpt( 0x271F/*_CURLOPT_POSTFIELDS*/ ,pd1 )  
  42.        
  43.         http.setPostData(pd1);
  44.        
  45.         http.onReceive = function(buffer,size,nmemb){
  46.                         result = raw.tostring(buffer,1,nmemb)
  47.                 //console.log(result)
  48.                 return nmemb
  49.         }
  50.        
  51.         console.log("正在连接curl......")
  52.         var data1, err1 = http.exec();  
  53.         if(data1){
  54.                 http.close();
  55.                 return result;
  56.         }else {
  57.                 console.log("err", err1, data1)
  58.                 return false, err1;
  59.         }
  60.        
  61. }
  62. var u1 = //https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack
  63. xs = //<xml><act_name>佣金提现</act_name><client_ip>192.168.0.1</client_ip><mch_billno>1444506002201710286626191857</mch_billno><mch_id>1444506002</mch_id><nonce_str>w6chr2t8mxjfqt997niqsucy2bluwq</nonce_str><re_openid>oSggFv90afInaqBU_6C7kgBFKv9Q</re_openid><remark>记得分享给朋友喔</remark><scene_id>PRODUCT_5</scene_id><send_name>爱买猫</send_name><total_amount>2307</total_amount><total_num>1</total_num><wishing>佣金提现,再接再厉!</wishing><wxappid>wx49d57cf42349f130</wxappid><sign>3B4F29409F12DD0CC79DBA634CB9D7B5</sign></xml>
  64. console.log(curl_post_ssl(u1, xs))
  65. console.pause(true);

复制代码


不过没证书,证书没法乱给啊,这是发红包接口
回复

使用道具 举报

187

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14023
 楼主| 发表于 2017-10-30 04:40:01 | 显示全部楼层
xfwsj 发表于 2017-10-28 13:59
不过没证书,证书没法乱给啊,这是发红包接口

该问题已修正
回复

使用道具 举报

3

主题

8

帖子

54

积分

一级会员

Rank: 2

积分
54
发表于 2017-10-30 10:45:18 | 显示全部楼层
果然好了,谢谢Jacen
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-9-19 08:15 , Processed in 0.062500 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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