Class wwHttp

This class can be used to make HTTP requests to Web servers, to retrieve data. You can also send data to the server using POST or PUT operations. All HTTP verbs are supported.

At it's simplest you can retrieve HTTP content like this:

loHttp = CREATEOBJECT("wwHttp")
lcHtml = loHttp.Get("https://markdownmonster.west-wind.com")

Content retrieved can also be saved to a file directly using the lcOutputName parameter of all the retrieval routines (.Get(), .Post(), .Put(), .Delete()):

loHttp = CREATEOBJECT('wwhttp')
loHttp.Get("https://west-wind.com/files/wwclient.zip","c:\temp\wwclient.zip")

You can also POST data to the server using the .AddPostKey() method which lets you post either individual form values or a complete POST buffer to the server.

POST some data to a server using HTML style form vars:

oHTTP=CREATEOBJECT("wwHTTP")

oHTTP.AddPostKey("FirstName","Rick")
oHTTP.AddPostKey("LastName","Strahl")
oHTTP.AddPostKey("Company","West Wind Technologies")

*** Optionally add custom headers
oHTTP.AppendHeader("cache-control","private")
oHttp.AppendHeader("Custom-Header","Custom value")

lcHTML = oHTTP.Post("http://www.west-wind.com/wconnect/TestPage.wwd")

ShowHTML( lcHTML )

alternately you can post an entire buffer of data to the server. This is common when you sent JSON or XML documents:

loHttp = CREATEOBJECT("wwHttp")

*** Specify that we want to post raw data and a custom content type
loHttp.cContentType = "application/json"  && Content type of the data posted
* loHttp.cHttpVerb = "POST"       && Use for anything but POST/GET verbs (PUT/DELETE/HEAD/OPTIONS)

*** Load up the XML data any way you need
lcJson = FILETOSTR("Data.json")

*** New simpler syntax for raw buffers
lcJsonResult = loHttp.Post("http://www.west-wind.com/JsonService.xsvc", lcJson)

*** Alternately you can also explicitly use `.AddPostKey()` (same behavior)
loHttp.AddPostKey(lcJson)
lcJsonResult = loHttp.Post("http://www.west-wind.com/JsonService.xsvc")

* do something with the JSON data

The wwHttp class provides HTTP access via WinInet to Visual FoxPro application. This class provides tight control over most aspects of the HTTP protocol including HTTP headers (client and server side), timeouts, proxy support, authentication, SSL connectivity as well as providing support for asynchronous HTTP operation.

For a variety of examples of using this class please see:

Based on: Relation
Stored in: wwHTTP.prg

Relation
  wwHttp

Remarks

External Dependencies
wwIPstuff.dll
zLib.dll

Class Members

MemberDescription

OnHttpBufferUpdate

The OnHttpBufferUpdate() method is called whenever a buffer is downloaded from the server and allows you to display download status information for large file downloads. It's also useful for freeing up the UI to avoid blocking HTTP calls that freeze the FoxPro UI when requests take too long.

OnHttpPostConnect

This event fires after the Http connection has been established and can be useful to set specific WinInet options on the HTTP connection.

AddHeader

Allows you to add HTTP headers to the HTTP request sent to the server. Headers can be of the standard HTTP header kind like Content-encoding or Cache, or custom headers specific to your application.

o.AddHeader(lcHeader,lcValue)

AddPostFile

A specific version of AddPostKey() designed for File or Data uploads for multi-part HTTP forms.

o.AddPostFile(tcKey, tcValue, tlIsFile, tcContentType, tcExtraHeaders)

AddPostKey

Set POST data to send on a POST or PUT request.

o.AddPostKey(tcKey, tcValue)

Delete

Uses an HTTP DELETE operation to retrieve Web content from a URL.

o.Delete(lcUrl, lcUserName, lcPassword, lcOutputFile)

Get

Uses an HTTP GET operation to retrieve Web content from a URL. GET operations pass only the URL and no content body data.

o.Get(lcUrl, lcUserName, lcPassword, lcOutputFile)

GetCertificates

Retrieves a list of certificates that are installed on the local machine as a collection.

o.GetCertificates(lcStoreName, lcLocation)

GetHttpHeader

Retrieves an HTTP once the Response has been returned. Requires that a successfull call to HttpGet or HttpGetEx was made that returns a header in cHttpHeaders.

o.wwHTTP.GetHttpHeader(lcHeader)

GetMessageFromResultCode

Returns the HTTP message for a given HTTP Result Code.

o.GetMessageFromResultCode(lcResultCode)

GetSystemErrorMsg

Returns a WinInet or Win32 API error message.

o.getsystemerrormsg(lnErrorNo, llAPI)

HttpCancelDownload

Cancels a download if OnHttpBufferUpdate are hooked up to do incremental URL downloads. When called cancels the current download.

o.httpcanceldownload()

HttpClose

Closes an HTTP Session opened with HTTPConnect(). This method is automatically called during DESTROY.

o.httpclose()

HttpConnect

This HTTP method initiates a low level HTTP request for use with HTTPGetEx by establishing an IP Session and connecting to a target server. The main purpose of this method is to specify the server name and the security options when connecting.

o.httpconnect(lcServer, lcUsername, lcPassword, llHTTPS)

HttpGet

This is the generic (and classical) Http operation that handles all types of HTTP requests.

o.HttpGet(lcUrl, lcUsername, lcPassword, lcOutputFile)

HttpGetEx

This method is the full featured HTTP access method that provides full support for the HTTP protocol including POST data, Basic Authentication and HTTPS protocol support. Requires HTTPConnect() to open a connection first and HTTPClose() to shut down.

o.HTTPGetEx(tcPage, @tcBuffer, @tnBufferSize, tcHeaders, tcFileName)

HttpGetExAsync

Allows you to retrieve HTTP content asynchronously and store the result value into a file. Client code can poll for the result file to retrieve the Async content.

o.HTTPGetExAsync(tcPage,tcResultFile,tnResultSize,tcHeaders)

HttpGetHeader

Retrieves just the HTTP header from a URL. Useful for retrieving information about a request prior to actually downloading the full URL. You can spy the content length from the header for example.

o.httpgetheader(tcPage, tcHeaders, tnHeaderSize)

HttpPing

Use this method to ping a Web site to check whether a valid Internet connection can be made.

o.HTTPPing(lnTimeout,lcUrl)

InternetCrackUrl

This method breaks down an incoming URL into its component pieces.

loUrl = o.InternetCrackUrl(lcUrl)

Post

Uses an HTTP POST operation to post content to the server and to retrieve Web content from a URL. You can pass in a URL and the raw Post data to send. Make sure to set .cContentType if using non-form data.

o.Post(lcUrl, lcPostData, lcOutputFile)

Put

Uses an HTTP PUT operation to post content to the server and to retrieve Web content from a URL.

o.Put(lcUrl, lcUserName, lcPassword, lcOutputFile)

SetOption

Sets an Internet option on a given connection handle. The handle can be either an Internet handle or the Http handle so this method has to be called after the connection has been opened. It is meant primarily for internal purposes.

o.SetOption(lnHandle,lnOptionId,lnOptionValue)

WinInetSetTimeout

Allows setting the timeout period for an HTTP request. The timeout is specified in seconds and controls how long a Connect, Read or Send operation waits before being considered timed out.

o.wininetsettimeout(dwTimeoutSecs)

cContentType

Sets the Content Type for POST data sent to the server. Use the content type if you're posting raw POST buffers for data like JSON (application/json) or XML (text/xml) or raw binary data.

cErrorMsg

Last Error Message Text for the last operation. Implemented only for SMTP and HTTP operations.

cExtraHeaders

Allows you to specify extra HTTP or SMTP headers when sending requests to Web Servers or SMTP serveres.

chttpheaders

This property is set when calling HTTPGetEx and contains the entire HTTP header of a request. This property is a result property only after an HTTP request completes. Use cExtraHeaders to specify custom headers when sending requests to the Web server (or the parameter in HTTPGetEx).

cHTTPProxyByPass

This property allows you to specify a list of host names or IP Addresses that should not be routed through the proxy server. IOW, this list allows you to directly access the requested domains/IPs bypassing the proxy.

cHTTPProxyName

Use this method to override proxy information if the default Proxy connection types via nHTTPConnectType don't work for you.

cHttpProxyPassword

Proxy server password if the proxy requires a login.

cHttpProxyUserName

Proxy server user name if the proxy requires a login.

cHttpVerb

Allows you to override the HTTP Verb for the request.

cLink

HTTP Link to visit on a site. Site relative URL. Example: /default.asp, /, /wconnect.dll?wwDemo~TestPage

cpassword

Password to log on to server (applies to FTP and HTTP)

cResultCode

Returns the HTTP result code from a request. These are HTTP spec result codes that are typically returned in the HTTP response header from the Web Server.

cResultCodeMessage

Returns the HTTP Result Code message based on the active cResultCode property.

cserver

HTTP Server Address. Format: www.west-wind.com, or 111.111.111.111

cUserAgent

The name of the user agent that the wwIPStuff client sends to the Web server. Change this property if you need to emulate a specific browser like Internet Explorer or Netscape.

cusername

Username for log in operations (FTP and HTTP).

lAllowGZip

Determines whether wwHTTP requests and decodes GZip content.

lCacheRequest

If set causes the current request to be cached if possible so that subsequent requests do not go back to the server to retrieve the data.

lDecodeUtf8

If .T. (default) automatically decodes UTF-8 encoded content from the server. Looks for the charset=utf-8 in the Content-Type.

lHttpCancelDownload

Property that can be read to see whether the current request was cancelled with HTTPCancelDownload.

lIgnoreCertificateWarnings

When .T. ignores warnings about invalid certificates. If the server responds with warnings rather than a complete revoked and out of date certificate, these warnings are ignored and the request continues as normal. The default behavior is that any warning causes an error.

lUseLargePostBuffer

Flag that can be set to cause the Post Buffer to use a File Stream to hold POST data. This allows the buffer to be larger than 16 megs to send large content to the server.

nClientCertificateIndex

If a client certificate is requested this flag determines which certificate is used. This is a zero based index. By default the first is used (0).

nconnecttimeout

Allows setting the timeout period for an HTTP request. The timeout is specified in seconds and controls how long a Connect, Read or Send operation waits before being considered timed out.

nerror

Returns the error code from the last request. This value is 0 if no error occurred or non-zero if an error occurred.

nHttpConnectType

Allows to specify how the connection is opened.

nHttpPostMode

Sets the form POST mode for requests specifically for key value pair form submissions that use AddPostKey(lcKey, lcValue). This property only applies to Url Encoded (application/x-www-form-urlencoded) or Multi-Part (multipart/form-data) form data not to full document types like application/json or text/xml for example.

nHttpServiceFlags

Flags that are used on the HTTP connection in WinInet. This method is needed to pass options that require setting values. For option switches you can use the .nHttpServiceFlags or .nServiceFlags settings instead.

nhttpworkbuffersize

Size of the download HTTP buffer used while downloading dynamically sized requests with HTTPGetEx. This is the size of chunks that will be pulled at a time and also determines how often OnHTTPBufferUpdate is called.

nServiceFlags

Use this property to override internet service connection flags used by WinINet. Used in the call to InternetConnect().

oPostStream

Internal wwFileStream instance that holds large string data when .lUseLargePostBuffer is used.

See also:

West Wind Web Connection

© West Wind Technologies, 2024 • Updated: 05/28/24
Comment or report problem with topic