搜索
查看: 18046|回复: 46

[扩展库] curl扩展库范例

    [复制链接]

187

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14023
发表于 2013-1-23 21:09:54 | 显示全部楼层 |阅读模式
curl下载页面示例:
  1. import curl;
  2. import console;

  3. var http = curl.easy();//创建客户端

  4. //设置选项
  5. http.setOpt( 0x2712/*_CURLOPT_URL*/,"http://eu.httpbin.org/post" ) //设置URL
  6. http.setOpt( 0x2A/*_CURLOPT_HEADER*/,1 );//回写HTTP头      
  7. http.setOpt( 0x271F/*_CURLOPT_POSTFIELDS*/
  8.         ,"username=asdlmmh&password=asdlmmh&question=0&answer=&templateid=0&expires=43200 989" )  

  9. //使用封装好的函数可以简化一些设置项
  10. http.setHttpHeader( "Host: 404.aardio.com" )
  11. http.setCookieFile( "cookies" )

  12. http.onReceive = function(buffer,size,nmemb){
  13.         console.log( raw.tostring(buffer,1,nmemb) )
  14.         return nmemb
  15. }

  16. console.log("正在连接测试网页......")
  17. http.exec();  
  18. console.varDump( http.getInfo() ) //显示信息
  19. console.pause()
复制代码


curl创建批量任务
  1. import curl;
  2. import console;

  3. var http = curl.easy();//创建客户端
  4. http.setOpt(0x2712/*_CURLOPT_URL*/,"http://eu.httpbin.org/post") //设置URL
  5. http.setOpt( 0x2A/*_CURLOPT_HEADER*/,1 );//回写HTTP头      
  6. http.setOpt( 0x271F/*_CURLOPT_POSTFIELDS*/
  7.         ,"username=asdlmmh&password=asdlmmh&question=0&answer=&templateid=0&expires=43200 989" )  
  8. http.setCookieFile("/cookies" )
  9. http.onReceive = function(buffer,size,nmemb){
  10.      console.log( ..raw.tostring(buffer,1,nmemb) )
  11.      return nmemb;
  12. }

  13. //下面演示批量任务
  14. console.log("正在连接测试网页")
  15. var manage = curl.multi();//创建批量任务管理器
  16. manage.add( http ) //添加任务

  17. var mrc,active
  18. do {
  19.         do {  
  20.                 mrc,active = manage.exec();  
  21.                 sleep(100)
  22.         } while ( mrc= -1/*_CURLM_CALL_MULTI_PERFORM*/)  
  23.                         
  24.         //if( manage.select(0) == -1/*_SOCKET_ERROR*/ )  break;
  25. }while( mrc==0 && active)

  26. console.pause();

复制代码
一句代码下载网页的简化用法,
提示get(),post()两个函数,参数用法完全兼容inet.http,inet.whttp的用法习惯。
  1. import curl;
  2. import console;

  3. var http = curl.easy();//创建客户端

  4. //POST演示
  5. console.log("正在连接网页")
  6. var str = http.post("http://eu.httpbin.org/post"
  7.         ,"username=asdlmmh&password=asdlmmh&question=0&answer=&templateid=0&expires=43200 989")

  8. //GET演示       
  9. var str = http.get("http://www.baidu.com")
  10. console.log(str)
  11. console.pause();
复制代码
上传文件演示:
  1. import curl;
  2. import console;

  3. //创建一个测试文件
  4. string.save("/test.txt","测试文件" )

  5. var http = curl.easy();
  6. http.setOpt( 0x2712/*_CURLOPT_URL*/ ,"http://httbin.org/post" )

  7. //设置上传表单
  8. http.setPostForm(
  9.         username="test";
  10.         file="@/test.txt" //文件路径首字符为@
  11. )

  12. //进度事件
  13. http.onProgress = function(buffer,downloadTotal,downloadNow,uploadTotal,uploadNow){
  14.         ..io.print( "下载大小:"+downloadTotal,"已下载:"+downloadNow,"上传大小:"+uploadTotal,"已上传:"+uploadNow)
  15. }

  16. //回显事件
  17. http.onReceive = function(buffer,size,nmemb){
  18.         console.log( ..raw.tostring(buffer,1,nmemb) )
  19.         return nmemb;
  20. }

  21. console.log("正在上传文件");
  22. http.exec();

  23. console.pause();
复制代码


上传文件简化版:

  1. import curl;
  2. import console;

  3. //创建一个测试文件
  4. string.save("/test.txt","测试文件" )

  5. var http = curl.easy();
  6. var str = http.post("http://httbin.org/post",{
  7.         username="test";
  8.         file="@/test.txt" //文件路径首字符为@
  9. })

  10. console.log("在上传文件");
  11. console.pause();
复制代码

点评

同意: 5.0 反对: 5.0
真棒: 5.0 继续努力: 5.0
同意: 5 反对: 5 真棒: 5 继续努力: 5
好强大了 持续关注  发表于 2013-1-24 16:16

评分

参与人数 2银币 +40 收起 理由
yyy + 10 好评
zhoubujin + 30 很给力!

查看全部评分

回复

使用道具 举报

13

主题

108

帖子

734

积分

三级会员

Rank: 4

积分
734
QQ
发表于 2013-1-23 21:13:29 | 显示全部楼层

[i=s] 本帖最后由 stillywud 于 2013-1-23 21:17 编辑 [/i] curl 在php里就听过大名鼎鼎啊。。。 这给模拟post

本帖最后由 stillywud 于 2013-1-23 21:17 编辑

curl 在php里就听过大名鼎鼎啊。。。
这给模拟post 又增加了一个大利器啊
PS:老大说,curl用法很灵活,其他语言里也有这个库,所以可以知识复用。
我是电车男!!!
记住!
我为人人,人人为我
想了解我名字由来请加QQ:502121980
回复

使用道具 举报

9

主题

78

帖子

504

积分

三级会员

Rank: 4

积分
504
发表于 2013-1-23 21:14:53 | 显示全部楼层

[i=s] 本帖最后由 rimren 于 2013-1-23 21:18 编辑 [/i] 好好学一学,感谢分享

本帖最后由 rimren 于 2013-1-23 21:18 编辑

好好学一学,感谢分享
回复

使用道具 举报

11

主题

43

帖子

336

积分

二级会员

Rank: 3Rank: 3

积分
336
QQ
发表于 2013-1-23 21:31:52 | 显示全部楼层

感谢老大,一些微博sdk都是 curl,可以直接拿来改了。

感谢老大,一些微博sdk都是 curl,可以直接拿来改了。
回复

使用道具 举报

51

主题

286

帖子

1729

积分

荣誉会员

Rank: 8Rank: 8

积分
1729
发表于 2013-1-23 22:00:44 | 显示全部楼层

谢谢,标记,学习...

谢谢,标记,学习...
◆ 半醒半醉日复日,花落花开年复年 ◆
回复

使用道具 举报

7

主题

76

帖子

488

积分

二级会员

Rank: 3Rank: 3

积分
488
发表于 2013-1-23 22:12:51 | 显示全部楼层

不知道封装库里面有FTP功能吗?

不知道封装库里面有FTP功能吗?

点评

支持FTP, http.setOpt( 0x2712/*_CURLOPT_URL*/,"ftp://用户名:密码@IP地址/文件路径")  发表于 2013-1-23 23:06
回复

使用道具 举报

7

主题

51

帖子

415

积分

培训班

积分
415
发表于 2013-1-23 22:18:12 | 显示全部楼层

PHP里 @文件路径 表示上传 .这个上传要如何去呢?

PHP里 @文件路径   表示上传  .这个上传要如何去呢?

点评

真棒: 5.0
1.1.0.3 已支持相同用法,见顶楼更新的示例代码  发表于 2013-1-24 12:42
真棒: 5
很给力!  发表于 2013-1-24 09:06
回复

使用道具 举报

20

主题

325

帖子

1945

积分

新手入门

积分
1945
发表于 2013-1-23 22:19:58 | 显示全部楼层

感谢分享。{:lol}

感谢分享。
回复

使用道具 举报

52

主题

1340

帖子

7326

积分

荣誉会员

Rank: 8Rank: 8

积分
7326
发表于 2013-1-23 22:32:11 | 显示全部楼层

{:lol} 这个好,谢谢老大

这个好,谢谢老大
回复

使用道具 举报

48

主题

593

帖子

3336

积分

五级会员

Rank: 8Rank: 8

积分
3336
发表于 2013-1-23 23:13:21 | 显示全部楼层

好东西,学习一下,感谢分享

好东西,学习一下,感谢分享
回复

使用道具 举报

13

主题

73

帖子

635

积分

培训班

积分
635
发表于 2013-1-24 00:00:30 | 显示全部楼层

这个用得上,正需要呢,感谢老大分享。{:victory:}

这个用得上,正需要呢,感谢老大分享。
回复

使用道具 举报

5

主题

80

帖子

666

积分

培训班

积分
666
发表于 2013-1-24 08:04:49 | 显示全部楼层

标记,以后会用到的!

标记,以后会用到的!
回复

使用道具 举报

8

主题

125

帖子

871

积分

三级会员

Rank: 4

积分
871
发表于 2013-1-24 08:19:37 | 显示全部楼层

好东西,代码简洁 功能强大,留着备用

好东西,代码简洁
功能强大,留着备用
回复

使用道具 举报

51

主题

286

帖子

1729

积分

荣誉会员

Rank: 8Rank: 8

积分
1729
发表于 2013-1-24 10:38:30 | 显示全部楼层

[i=s] 本帖最后由 5e365 于 2013-1-24 10:39 编辑 [/i] [code]namespace list{ _meta = { _

本帖最后由 5e365 于 2013-1-24 10:39 编辑
  1. namespace list{
  2.         _meta = { _topointer = function(){ return this.handle;        } }
  3.         curl_slist_append = dll.api("curl_slist_append","pointer(pointer list,string s)","cdecl" )
  4.         curl_slist_free_all = dll.api("curl_slist_free_all","void(POINTER list)","cdecl" )
  5. }
复制代码
return this.handle,老大,请问下这里的this是什么东东,原表里不是用owner吗?

点评

是我写错了,谢谢  发表于 2013-1-24 10:46
◆ 半醒半醉日复日,花落花开年复年 ◆
回复

使用道具 举报

7

主题

51

帖子

415

积分

培训班

积分
415
发表于 2013-1-24 13:05:33 | 显示全部楼层

{:3_59:} 给力 已更新

给力 已更新
回复

使用道具 举报

7

主题

51

帖子

415

积分

培训班

积分
415
发表于 2013-1-24 13:37:30 | 显示全部楼层

经过抓包比较 正常的上传 Content-Disposition: form-data; name="Filedata"; filename="1.jp

经过抓包比较
正常的上传  
Content-Disposition: form-data; name="Filedata"; filename="1.jpg"
Content-Type: image/jpeg
发送的数据

您的
Content-Disposition: form-data; name="Filedata"
发送的数据

不知道这样上传会不会受影响.我的反正是没上传成功到我

点评

已修正,谢谢!  发表于 2013-1-24 16:02
回复

使用道具 举报

117

主题

1237

帖子

6592

积分

六级会员

Rank: 9Rank: 9Rank: 9

积分
6592
发表于 2013-1-24 14:06:07 | 显示全部楼层

强大

强大
回复

使用道具 举报

7

主题

51

帖子

415

积分

培训班

积分
415
发表于 2013-1-24 20:11:11 | 显示全部楼层

[i=s] 本帖最后由 zhoubujin 于 2013-1-24 20:40 编辑 [/i] 1. 直接采用 HTTP.POST 貌似会有俩次提交.

本帖最后由 zhoubujin 于 2013-1-24 20:40 编辑

1. 直接采用 HTTP.POST 貌似会有俩次提交.

2.



http.onReceive = function(buffer,size,nmemb){
            edit.text=http.get("http://www.baidu.com")
}
再次调用 curl 的 http.get会出错


这个是我搞错了 这样写就可以了

http.onReceive = function(buffer,size,nmemb){
           var http1 = curl.easy();
            edit.text=http1.get("http://www.baidu.com")
           http1.exec()
}



         
回复

使用道具 举报

187

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14023
 楼主| 发表于 2013-1-24 20:27:50 | 显示全部楼层

[code] import curl; var http1 = curl.easy(); edit.text=http1.get("http://www.


  1. import curl;
  2. var http1 = curl.easy();
  3. edit.text=http1.get("http://www.baidu.com")
  4. http1.exec()
复制代码
最后一句 http1.exec()应当去掉
http1.get() 已经执行了 http1.exec(),
你在后面再加一句 http1.exec() 就是重复的执行两次

http.onReceive 只是用来接收数据的。
不要在 http.onReceive 里面创建新的 http请求
如果你想多个下载同时执行,用 curl.multi() 就可以。
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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