curl-library
(Using libcurl.vb and Excel VBA) GET Response=HTTP/1.1 400 Bad Request
Date: Thu, 18 May 2006 15:19:36 +1200
Hi,
I'm hoping there'll be a simple solution to my problem.
I downloaded the libcurl.vb Internet Client API for Visual Basic 6 and Microsoft Office from Sourceforge and am trying to get it working with Excel 2000 VBA. I have migrated some of the sample/demonstration code to VBA such that it compiles and runs. It appears to connect through our proxy server but I'm stuck with a "400 Bad Request" response to the GET request.
I've included below the debug information provided by cURL and the VBA module code used.
Any suggestions on what may be going wrong and how to fix it would be much appreciated!
Cheers, Grant
-----------------------Start of Debug.Print Output--------------------------------------
info=0, debugMsg=
About to connect() to 10.99.22.43 port 80
info=0, debugMsg=
Trying 10.99.22.43...
info=0, debugMsg=
connected
info=0, debugMsg=
Connected to 10.99.22.43 (10.99.22.43) port 80
info=2, debugMsg=
GET http://www.google.com HTTP/1.1
Host: www.google.com
Pragma: no-cache
Accept: */*
info=1, debugMsg=
HTTP/1.1 400 Bad Request
info=1, debugMsg=
Server: Microsoft-IIS/5.0
info=1, debugMsg=
Date: Wed, 17 May 2006 23:53:29 GMT
info=1, debugMsg=
Connection: close
info=1, debugMsg=
Content-Type: text/html
info=1, debugMsg=
Content-Length: 87
info=3, debugMsg=
<html><head><title>Error</title></head><body>The parameter is incorrect. </body></html>
info=0, debugMsg=
Closing connection #0
Here's the HTML:
<html><head><title>Error</title></head><body>The parameter is incorrect. </body></html>
--------------------------End of Debug.Print Output-------------------------------------
------------------------Start of EasyGet Module Code------------------------------------
Option Explicit
' $Id: EasyGet.bas,v 1.1 2005/03/01 00:06:26 jeffreyphillips Exp $
' Demonstrate Easy Get Capability
Private Sub Test()
EasyGet ("http://www.google.com")
End Sub
Private Sub EasyGet(url As String)
Dim easy As Long
Dim ret As CURLcode
Dim buf As New Buffer
easy = VBCurl_Easy_Init()
VBCurl_Easy_Setopt easy, CURLOPT_URL, url
VBCurl_Easy_Setopt easy, CURLOPT_PROXY, "10.99.22.43:80"
VBCurl_Easy_Setopt easy, CURLOPT_WRITEDATA, ObjPtr(buf)
VBCurl_Easy_Setopt easy, CURLOPT_WRITEFUNCTION, _
AddressOf WriteFunction
VBCurl_Easy_Setopt easy, CURLOPT_DEBUGFUNCTION, _
AddressOf DebugFunction
VBCurl_Easy_Setopt easy, CURLOPT_VERBOSE, True
ret = vbcurl_easy_perform(easy)
VBCurl_Easy_CleanUp easy
Debug.Print "Here's the HTML:"
Debug.Print buf.stringData
End Sub
' This function illustrates a couple of key concepts in libcurl.vb.
' First, the data passed in rawBytes is an actual memory address
' from libcurl. Hence, the data is read using the MemByte() function
' found in the VBVM6Lib.tlb type library. Second, the extra parameter
' is passed as a raw long (via ObjPtr(buf)) in Sub EasyGet()), and
' we use the AsObject() function in VBVM6Lib.tlb to get back at it.
Private Function WriteFunction(ByVal rawBytes As Long, _
ByVal sz As Long, ByVal nmemb As Long, _
ByVal extra As Long) As Long
Dim totalBytes As Long, i As Long
Dim obj As Object, buf As Buffer
totalBytes = sz * nmemb
Set obj = AsObject(extra)
Set buf = obj
' append the binary characters to the HTML string
For i = 0 To totalBytes - 1
' Append the write data
buf.stringData = buf.stringData & Chr(MemByte(rawBytes + i))
Next
' Need this line below since AsObject gets a stolen reference
ObjectPtr(obj) = 0&
' Return value
WriteFunction = totalBytes
End Function
' Again, rawBytes comes straight from libcurl and extra is a
' long, though we're not using it here.
Private Function DebugFunction(ByVal info As curl_infotype, _
ByVal rawBytes As Long, ByVal numBytes As Long, _
ByVal extra As Long) As Long
Dim debugMsg As String
Dim i As Long
debugMsg = ""
For i = 0 To numBytes - 1
debugMsg = debugMsg & Chr(MemByte(rawBytes + i))
Next
Debug.Print "info=" & info & ", debugMsg=" & vbCrLf & debugMsg
DebugFunction = 0
End Function
------------------------ End of EasyGet Module Code ------------------------------------
Received on 2006-05-18