2015-04-28 390 views
-1

我試圖拉動以下網站的信息:http://gis.calhouncounty.org/ParcelViewer/index.html。如果您輸入PPIN 66078,然後點擊房產稅,它將顯示數據。我正試圖在VBA中重新創建這個SOAP請求,但未成功。它調用服務,但響應中的所有數據都是空白的。我非常沮喪,甚至重新創建了完整的標題集,但無濟於事。也許有一個cookie問題,但我的電腦上的cookies似乎不會很快過期。這裏是我在提取:通過VBA的SOAP

URL = "http://gis.calhouncounty.org/wsCalhounParcel2/Inquiry.asmx?WSDL" 

method = "getTaxBill" 
parcel = Range("A" & currentrow).Value 


SoapRequest = SoapRequest & "<?xml version=""1.0"" encoding=""utf-8""?><soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""> " 
SoapRequest = SoapRequest & "<soap:Body>" 

SoapRequest = SoapRequest & "<tns:" & method & " xmlns:tns=""http://gis.calhouncounty.org"">" 
SoapRequest = SoapRequest & "<tns:PPIN>" & parcel & "</tns:PPIN>" 
SoapRequest = SoapRequest & "</tns:" & method & ">" 

SoapRequest = SoapRequest & "</soap:Body>" 
SoapRequest = SoapRequest & "</soap:Envelope>" 


Set objHTTP = CreateObject("Msxml2.XMLHTTP") 
objHTTP.Open "POST", URL, False 
objHTTP.setRequestHeader "Host", "gis.calhouncounty.org" 
objHTTP.setRequestHeader "Connection", "keep-alive" 
objHTTP.setRequestHeader "Content-Length", SoapRequestLen 
objHTTP.setRequestHeader "Origin", "http://gis.calhouncounty.org" 
objHTTP.setRequestHeader "X-Requested-With", "ShockwaveFlash/17.0.0.169" 
objHTTP.setRequestHeader "SOAPAction", "http://gis.calhouncounty.org/" & method 
objHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36" 
objHTTP.setRequestHeader "Content-Type", "text/xml; charset=utf-8" 
objHTTP.setRequestHeader "Accept", "*/*" 
objHTTP.setRequestHeader "Referer", "http://gis.calhouncounty.org/ParcelViewer" 
objHTTP.setRequestHeader "Accept-Encoding", "gzip, deflate" 
objHTTP.setRequestHeader "Accept-Language", "en-US,en;q=0.8" 

objHTTP.setRequestHeader "Cookie", "ASPSESSIONIDAABARSAB=DIIJLAGCFJKDFKBCDNMMLEIB; ASPSESSIONIDAAACQSBA=BKAJPFCDCAJLBAKFFBACBMGC; ASPSESSIONIDCCCBRTBA=DKJPBAPDNLIFBOJGCPEDMAHG; __utma=262294995.1570768928.1429018531.1429018531.1430173329.2; __utmc=262294995; __utmz=262294995.1430173329.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); ASPSESSIONIDAQTRATAB=OHCBMBMCNALFKOCODDMIAHIA; _ga=GA1.2.90452212.1429018592; __utmt=1; __utma=167846455.90452212.1429018592.1430173349.1430248358.4; __utmb=167846455.1.10.1430248358; __utmc=167846455; __utmz=167846455.1430173349.3.3.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)" 

objHTTP.send SoapRequest 

任何幫助是令人難以置信的讚賞! -Andy

回答

0

你沒有錯誤檢查。將以下錯誤檢查調整爲您的代碼。 err.number, err.description, err.source, file.status, file.statustext, file.getallresponseheaders

該URL必須100%正確。與瀏覽器不同,沒有代碼來修復網址。

我的程序的目的是獲取錯誤的詳細信息。

我如何獲得正確的網址是在瀏覽器中輸入我的網址,導航,並且正確的網址通常位於地址欄中。另一種方法是使用鏈接的屬性等來獲取URL。

此外Microsoft.XMLHTTP映射到Microsoft.XMLHTTP.1.0。 HKEY_CLASSES_ROOT \ Msxml2.XMLHTTP映射到Msxml2.XMLHTTP.3.0。稍後嘗試一下

用xmlhttp試試這個方法。編輯網址等如果它似乎工作註釋如果/結束如果傾倒信息,即使似乎工作。它是vbscript,但vbscript在vb6中有效。

On Error Resume Next 
Set File = WScript.CreateObject("Microsoft.XMLHTTP") 
File.Open "GET", "http://www.microsoft.com/en-au/default.aspx", False 
'This is IE 8 headers 
File.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; BCD2000; BCD2000)" 
File.Send 
If err.number <> 0 then 
    line ="" 
    Line = Line & vbcrlf & "" 
    Line = Line & vbcrlf & "Error getting file" 
    Line = Line & vbcrlf & "==================" 
    Line = Line & vbcrlf & "" 
    Line = Line & vbcrlf & "Error " & err.number & "(0x" & hex(err.number) & ") " & err.description 
    Line = Line & vbcrlf & "Source " & err.source 
    Line = Line & vbcrlf & "" 
    Line = Line & vbcrlf & "HTTP Error " & File.Status & " " & File.StatusText 
    Line = Line & vbcrlf & File.getAllResponseHeaders 
    wscript.echo Line 
    Err.clear 
    wscript.quit 
End If 

On Error Goto 0 

Set BS = CreateObject("ADODB.Stream") 
BS.type = 1 
BS.open 
BS.Write File.ResponseBody 
BS.SaveToFile "c:\users\test.txt", 2 

另請參閱這些其他對象是否工作。

C:\Users>reg query hkcr /f xmlhttp 

HKEY_CLASSES_ROOT\Microsoft.XMLHTTP 
HKEY_CLASSES_ROOT\Microsoft.XMLHTTP.1.0 
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP 
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.3.0 
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.4.0 
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.5.0 
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.6.0 
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP 
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.3.0 
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.4.0 
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.5.0 
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.6.0 
End of search: 12 match(es) found. 

也知道有一個鎖定發生之前,你可以有多少次調用任何特定的XMLHTTP對象的限制。如果發生這種情況,並且在調試代碼時發生,只需更改爲其他xmlhttp對象

我得到這個代碼。

--------------------------- 
Windows Script Host 
--------------------------- 


Error 0(0x0) 

Source 



HTTP Error 200 OK 

Date: Tue, 28 Apr 2015 21:56:46 GMT 

Server: Microsoft-IIS/7.5 

Cache-Control: private, max-age=0 

Content-Type: text/xml; charset=utf-8 

X-AspNet-Version: 2.0.50727 

X-Powered-By: ASP.NET 

Access-Control-Allow-Origin: * 

Keep-Alive: timeout=5, max=100 

Connection: Keep-Alive 




--------------------------- 
OK 
--------------------------- 

然後我msgbox出responsebody,我有數據發送貓,而不是你的電子表格中的內容。