搜索
查看: 1030|回复: 5

求完整的封装curl函数,求改进

[复制链接]

1

主题

5

帖子

34

积分

新手入门

Rank: 1

积分
34
发表于 2018-3-15 09:28:33 | 显示全部楼层 |阅读模式
本帖最后由 aauloveyou 于 2018-3-15 09:29 编辑
  1. import console;
  2. import curl;
  3. import raw;

  4. function curl_exec(url,req_method,postdata){
  5.         var HeaderStr;
  6.         var result;
  7.         var http = curl.easy();//创建客户端
  8.         //设置选项
  9.         http.setOpt( 0x2712/*_CURLOPT_URL*/,url)//设置URL
  10.         if(req_method="POST"){
  11.                 http.setOpt(0x2F/*_CURLOPT_POST*/,1);
  12.                 http.setOpt( 0x271F/*_CURLOPT_POSTFIELDS*/,postdata);
  13.                 HeaderStr = "Content-Type: application/json;";
  14.         }else {
  15.                 HeaderStr = "Content-Type: application/x-www-form-urlencoded;";
  16.         }
  17.         HeaderStr = HeaderStr ++ "Accept-Language: zh-cn;";
  18.         HeaderStr = HeaderStr ++ "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36;";
  19.         HeaderStr = HeaderStr ++ "Expect:;";
  20.         http.setHttpHeader(HeaderStr);
  21.         http.setOpt(0xD/*_CURLOPT_TIMEOUT*/,60);
  22.         http.setOpt(0x40/*_CURLOPT_SSL_VERIFYPEER*/,false);
  23.         http.setOpt(0x51/*_CURLOPT_SSL_VERIFYHOST*/,false);
  24.         http.setOpt(0x2A/*_CURLOPT_HEADER*/,false );// 显示返回的Header区域内容
  25.         http.setOpt( 0x2C/*_CURLOPT_NOBODY*/,false );//不显示返回内容
  26.         http.onReceive = function(buffer,size,nmemb){
  27.                 result = raw.tostring(buffer,1,nmemb);
  28.                 return nmemb;
  29.         }
  30.         http.exec();
  31.         http.close();
  32.         return result;
  33. }

  34. var url = "http://jkfdlbh92393.hk2.ifreeurl.com/da.php";
  35. var req_method = "GET";
  36. var postdata = "";
  37. console.log("开始执行 (大文件不完整)...",url);
  38. var result = curl_exec(url,req_method,postdata);
  39. console.log("执行结果是" ,result );

  40. console.log("以下的两个测试需要非大陆IP才能访问,如果条件不方便可以先忽略,主要是测试https的问题");
  41. console.log("我用香港IP测试下面两个网址的结果是:http可以正常获取,https则不成功");
  42. var url = "https://api.huobi.pro/v1/account/accounts";
  43. var req_method = "GET";
  44. var postdata = "";
  45. console.log("开始执行 https...",url);
  46. var result = curl_exec(url,req_method,postdata);
  47. console.log("执行结果是" ,result );

  48. var url = "http://api.huobi.pro/v1/account/accounts";
  49. var req_method = "GET";
  50. var postdata = "";
  51. console.log("开始执行 http...",url);
  52. var result = curl_exec(url,req_method,postdata);
  53. console.log("执行结果是" ,result );

  54. console.pause(true);
复制代码
回复

使用道具 举报

1

主题

5

帖子

34

积分

新手入门

Rank: 1

积分
34
 楼主| 发表于 2018-3-15 09:30:59 | 显示全部楼层
以上函数存在2个问题
1.遇到大文件时,获取不完整
2.https访问不成功
还有添加http头的方式不知道对不对,求大侠帮忙改进
回复

使用道具 举报

5

主题

26

帖子

277

积分

二级会员

Rank: 3Rank: 3

积分
277
发表于 2018-3-15 13:23:29 | 显示全部楼层
大文件不清楚,可以把超时设置更长
https访问可以用 CURLOPT_SSL_VERIFYPEER,忽略SSL验证
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2018-3-15 13:39:22 | 显示全部楼层
HTTPS这些看下CURL的文档就可以了,
大文件,你还要给CURL写个断点续传的模块才行,参考我写的inet.httpFile
回复

使用道具 举报

1

主题

5

帖子

34

积分

新手入门

Rank: 1

积分
34
 楼主| 发表于 2018-3-15 13:50:01 | 显示全部楼层
wedd 发表于 2018-3-15 13:23
大文件不清楚,可以把超时设置更长
https访问可以用 CURLOPT_SSL_VERIFYPEER,忽略SSL验证

http.setOpt(0x40/*_CURLOPT_SSL_VERIFYPEER*/,false);
上面的演示代码中已经设置CURLOPT_SSL_VERIFYPEER这个参数了,也没能成功
回复

使用道具 举报

1

主题

5

帖子

34

积分

新手入门

Rank: 1

积分
34
 楼主| 发表于 2018-3-15 13:51:13 | 显示全部楼层
Jacen.He 发表于 2018-3-15 13:39
HTTPS这些看下CURL的文档就可以了,
大文件,你还要给CURL写个断点续传的模块才行,参考我写的inet.httpFi ...

测试大内容网址:http://jkfdlbh92393.hk2.ifreeurl.com/da.php
也不是要下载特别大的文件,就是演示代码中的那个网址能访问成功就可以了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-10-20 04:20 , Processed in 0.078125 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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