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中怎么傳送?
uj5u.com熱心網友回復:
不要做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
共享臨時文本檔案這種行程之間的通訊方法相比其它方法的優點有很多,下面僅列出我現在能想到的:
·行程之間松耦合
·行程可在同一臺機器上,也可跨機,跨作業系統,跨硬體平臺,甚至跨國。
·方便除錯和監視,只需讓第三方或人工查看該臨時文本檔案即可。
·方便在線開關服務,只需洗掉或創建該臨時文本檔案即可。
·方便實作分布式和負載均衡。
·方便佇列化提供服務,而且幾乎不可能發生佇列滿的情況(除非硬碟空間滿)
·……
“跨語言、跨機,跨作業系統,跨硬體平臺,跨國,跨*.*的”苦海無邊,
回頭是“使用共享純文本檔案進行資訊交流”的岸!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/76761.html
標籤:VBA
