VBA抓取网页数据,需要认证:要获取的网站只有个php范例,PHP语言范例中有这五句:$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://bter.com/api/1/private/getfunds');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); //$post_data是一个随机数字串如:'nonce=1460741026120200'
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$res = curl_exec($ch);//说明:$headers形如:{Array ( [0] => KEY: 公钥 [1] => SIGN: Sha512哈希 [可选参数名] => 参数值 ) }
//其中:Sha512哈希=hash_hmac('sha512', $post_data随机数明码, $secret密钥),其实就是一个512位的哈希值,用以验证
//就是主要传送这两个数据就可以得到JSON格式的数据保存在$res中,参数提交方式POST。
转到VBA中:(我在网上查到这段代码,不知道能不能用,或者其他代码也可)
Sub xxx()
  Dim http
  Set http = CreateObject("Microsoft.XMLHTTP")
  http.Open "POST", "http://网址/PHP文件名.PHP", False
  http.send "T1=XXX&T2=XXXXX&T3=XXXXXX"
  If http.Status = 200 Then
    [a1] = http.responseText
    MsgBox "成功。"
  Else
    MsgBox "调用失败,错误代码:" & http.Status
  End If
End Sub以我的理解:VBA中"T1=XXX&T2=XXXXX&T3=XXXXXX",就是指PHP中的$headers,对吗?但那个$post_data数据应该放在VBA代码的什么位置?
php中传送的两个数据:$post_data、$headers,在VBA中怎么传送?

解决方案 »

  1.   

    不要做A语言代码修改为B语言代码的无用功。
    也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。
    只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。
    即可很方便地让A、B两种语言之间协调工作。
    比如:
    A将请求数据写到文件a.txt,写完后改名为aa.txt
    B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt
    A发现bb.txt存在时,读取其内容,读完后删除bb.txt
    以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。
    除非A或B不支持判断文件是否存在、文件读写和文件更名。
    但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢?
    可以将临时文件放在RamDisk上提高效率减少磨损磁盘。
    数据的结构很复杂的话,文本文件的格式问题可参考json或xml共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的:
    ·进程之间松耦合
    ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。
    ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。
    ·方便在线开关服务,只需删除或创建该临时文本文件即可。
    ·方便实现分布式和负载均衡。
    ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满)
    ·……“跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边,
    回头是“使用共享纯文本文件进行信息交流”的岸!