NetTalk WebClient
Available
in NetTalk Desktop, NetTalk Server and NetTalk Apps. Applies to Desktop
(ABC or Clarion) apps.
Introduction
The WebClient Class is used to let your program
interact with web servers. Those servers might be serving up files, they
might be a Web Service API, or you might be sending information, or files
to those servers.
The WebClient class allows your program to act as an HTTPS (or HTTP)
client. The defaults for HTTPS are usually correct, and it is not usually
necessary to set any extra properties for HTTPS. If the URL you are
connecting to contains HTTPS:// as the protocol then the object will
automatically operate in secure mode. If you are using HTTPS you will need
to distribute some extra DLL and PEM files. See
Deploying
a TLS Client or Server.
Since
SOAP and
REST API Servers typically exist on top
of HTTPS this class is also the one you will use if you need to
communicate with a SOAP or REST server.
WebClient objects use asynchronous communications, meaning that your
window will "stay alive" as the communications happens in the background.
This means that the WebClient object must be on a procedure with a window,
not a source procedure. (You can however hide the window if you like).
The most common request methods are
Get and
Post (although there are quite a few others
supported as well.)
Because the code is asynchronous, when you make a request the code carries
on to the next line before the result arrives. When the result has arrived
from the server then the
PageReceived method
is called (and the
ThisPage property
contains the returned header and data.) If a network error occurs then the
ErrorTrap method will be called instead. If
the remote server does not like your request (for whatever reason) and
returns an error then that error will flow into
PageReceived
, not
ErrorTrap. So your "handle
reply" code goes into PageRecieved, not into the code immediately
following the code.
This approach is non-blocking, meaning that your UI does not "freeze"
while the communication to the remote server (which might take a while)
takes place.
See Also
Many other classes are related to, or depend on, the
WebClient class.
JumpStart
- Add the NetTalk Global Extension to your application
- On a Window, add a NetTalk Object Extension.
- Choose a name for the object (this document will use the name net) and set the base class to NetWebClient
Terminology
Name |
Description |
HTTP |
HyperText Transfer Protocol - this is the "language" of web
servers - it is the building block of all communications between a
WebServer and a WebClient. (Your browser is an example of a
WebClient) |
HTTPS |
The same as HTTP, but over a secure connection. Connections are
secured using TLS. |
TLS |
Transport Layer Security. This used to be known as SSL (Secure
Sockets Layer.) |
Host |
The URL or IP address of the Web server you want to talk to. |
Port |
The port number you are connecting to. The usual value is 80 for
HTTP sites and 443 for Secure (TLS) sites. |
GET, POST, PUT, PATCH, DELETE, QUERY, OPTIONS |
These are the typical commands you will use to interact with a
web server. Also known as "HTTP VERBS" these are the basic
commands of the HTTP protocol. |
Upgrading
If you are upgrading from an earlier version of
NetTalk to NetTalk 14 or later and you are getting errors then read this
section for required, or suggested, changes.
- In
NetTalk 14.23 a new property (OptionDontRedirectHTTPtoHTTPS)
was introduced to the WebClient object. This property is set to true by default. This means the client will no
longer auto-redirect from an HTTP request to an HTTPS location. This
will assist developers in spotting where HTTP is used incorrectly, and
fix it to the correct location. This is important because the HTTP
request may contain sensitive information, like API keys, and making
the first request as HTTP exposes this information to packet sniffers.
In the past this URL error (using HTTP) would go unnoticed because the
server would likely return a redirect, and the client would silently
just go to the correct URL.
- In NetTalk 10 the Page property (which
was a STRING) is now renamed as ThisPage,
and is declared as a STRINGTHEORY object.
This will affect code you may have embedded in the PageReceived
method.
The contents of the ThisPage property
can be retrieved using ThisPage.GetValue().
For example
whatever(self.page)
would be replaced with
whatever(self.thispage.GetValue())
In some cases (notably when calling xFiles.Load)
the self.page parameter was being passed as a pointer. In these cases
the code is replaced with
whatever(self.thispage.GetValuePtr())
- The PageLen property has been removed.
Use self.ThisPage.Length() instead.
- The _Command property (String) has been
replaced with _CommandText (StringTheory.)
Use _CommandText.GetValue()
- The _PageContentLen property has been
renamed to PageContentLen.
- The _GetContentType method has been
renamed to GetContentType.
- The _HTTPVersion property has been
renamed to HTTPVersion. As from version
9.20 this property defaults to 1.1 not 1.0.
If you have this line in your embed code;
net._HTTPVersion = 'HTTP/1.1'
then you can just remove the line.
DLL Distribution
Get a Web Page
The simplest command to a web server is a simple GET. (The FETCH
method works exactly the same as the GET - the two are synonyms of each
other - you can use that method instead if you prefer.)
The basic syntax of the GET method is a single parameter which is the URL
of the page (or file) to fetch from the server. For example;
net.Get('capesoft.com')
If the site is using HTTPS then simply add that to the front of the URL
net.Get('https://capesoft.com')
Parameters can be added to a URL in the usual URL encoded way;
net.Get('capesoft.com?products=all&amazing=yes')
An even easier approach, especially when dealing with multiple parameters
is to use the SetValue method;
net.SetValue('name','value')
net.SetValue('anothername','anothervalue')
net.get('capesoft.com')
This approach takes care of things like URL encoding and so on, so is a
lot easier.
The command will begin executing in the background. When the response has
arrived then the PageRecieved method will
be called. The contents of the response will be in the
ThisPage property. The response will include the header and the
response text. To remove the header part use the
RemoveHeader method.
You can save the response to a file, with or without the header. To save
it with the header;
net.ThisPage.SaveFile('filename')
To save it without the header
net.RemoveHeader()
net.ThisPage.SaveFile('filename')
Post Data to a Web Server
When sending data to a server the most common method
that you are required to use is
Post. Post is
similar to Get in that you use a simple URL as the parameter, but a Post
can also send Data to the server as part of the request.
For example
net.Post('capesoft.com',data)
The data parameter can be either a string, or a StringTheory object.
The format of data depends on what the server is expecting - it might be
json, or xml, or indeed anything.
The default format is form-encoding. If the post you are doing takes form
encoded data, then, as before, use the
SetValue method
to add fields to the request. For example;
net.SetValue('CustomerName','Charlie')
net.SetValue('Company','Capesoft')
Using this method you can attach files to the upload as well
net.SetValue('somefile','c:\temp\a.pdf',net:AsFile)
When doing a post in this way, just leave the second parameter to the Post
method blank, or omit it.
net.Post(url)
XML
When sending a Post to a WebService the data may
need to be in XML format. Use your
favorite XML creation tool to format this text.
You will need to set the
Content-Type
header to be XML so that the server knows the data is in XML format.
data = '<some xml>'
net.SetContentType('xml')
net.post(url,data)
JSON
When sending a Post to a WebService the data may
need to be in JSON format. Use your
favorite JSON creation tool to format this text.
You will need to set the
Content-Type
header to be JSON so that the server knows the data is in JSON format.
data = '{{some json}'
net.SetContentType('json')
net.post(url,data)
Attaching a File to an Upload
There are three common ways of uploading a file to a
web server.
- Inside the XML data. (Typically to a WebService API)
- Inside the JSON data. (Typically to a WebService API)
- As part of a Multipart/form-data post. (Typically mimicking a POST
from a browser's File Upload button.)
If the file is included in XML then it is typically Base64 encoded,
and included in the XML as a simple text field. Consult your XML tool
documentation if this is the approach the server requires.
If the file is included in JSON then it is typically JSON Encoded and
included in the JSON as a simple text field. Consult your JSON tool
documentation if this is the approach your server requires.
If you are mimicking a Post from a browser, and uploading the file as
a multipart form-data encoded Post, then use the SetValue method to
add one or more fields (including the file) to the data prior to
calling the Post method, as described above.
Reply Format
Some requests will require that you tell the server
what format the reply should be in. This is done using the SetAccept
method.
net.SetAccept('xml')
Authentication
Some web servers make use of BASIC or DIGEST
authentication. This is authentication which typically requires 2 parts;
the username and the password, and the authentication is automatically
added into the header for you.
You can easily add authentication to your request by adding the following
line before your call to GET or POST.
For Basic Authentication you would add
net.Authorization =
net.CreateAuthorizationString(User,Password,Net:WebBasicAuthentication,true)
And for Digest Authentication you would add
net.Authorization =
net.CreateAuthorizationString(User,Password,Net:WebDigestAuthentication,true)
Cookies
Cookies are variables sent to you by a web server.
When making subsequent requests to the same server then (usually) the
cookies should be sent with the reply.
NetTalk includes the ability to parse cookies from incoming replies, and
include them (when talking to the same host) with subsequent requests by
the same object. To turn this ability on set
net.OptionAutoCookie = true
before the first call to the server.
In additional you can add other cookies to the request using the SetCookie
method.
net.SetCookie('whatever','somevalue')
Converting Examples to Clarion
If you are talking to an API server, (and you are
lucky) then that service will have some documentation of the methods and
parameters and so on that the service requires. Translating this
documentation into Clarion can take some practice and understanding.
CURL
If you are
really lucky then the service
includes a CURL example. CURL is a command line tool which exists on all
computers (Windows, Linux, Mac etc) which is basically a Web Client.
Since it is a command line tool it has a well defined syntax. And
because the syntax is well defined, it can easily be translated into any
programming language.
If you go to
capesoft.com/curlcode
you can enter the CURL example there, and then the NetTalk client code
will be generated for you.
Progress Bar Control
When doing a large upload, or download, it's useful
for the user to see a progress bar so they get some idea of how far it
still has to go. The NetWebClient class has support for progress controls
built in.
To use the progress control simply set the ProgressControl property of the
object to the Field Equate of the progress control on your window. For
example;
net.ProgressControl = ?progress1
The control will be updated automatically. It is updated as incoming
packets are received for downloads and at 1.5 second intervals for
uploads.
Note that when doing a PUT or POST request from a web client to a web
server there are two distinct events which are monitored by the progress
bat. The first is the upload of the Post data. The second is the download
of the reply. So with a PUT or POST command the user may see the progress
control run "twice". Of course one (or both) of the two operations may be
very fast.
SOAP
SOAP is a particular form of XML. So a SOAP server is
a web server which expects incoming data to be formatted as XML (and
specifically SOAP XML). SOAP servers typically only support the GET or
POST methods.
The data returned is in XML format.
Formatting requests for SOAP 1.1 and SOAP 1.2 is slightly different.
SOAP 1.1
In SOAP 1.1 an additional header is required in the
actual WebClient request. The SOAPAction property is used for this. The
SOAPAction header is set to the name of the server, and the name of the
method being called. For example;
net.SetContentType('soap11')
net.SetAccept('xml')
net.SOAPAction = clip(Server) & '/dbCustomers'
net.Post(url,data)
SOAP 1.2
SOAP 1.2 does not require the custom header to be
set, but the content type does need to be set.
net.SetContentType('soap12')
net.SetAccept('xml')
net.Post(url,data)
REST
REST is an alternative to SOAP. It serves the same
purpose but is JSON based rather than XML based. REST is also a lot less
formal than SOAP - so there's a lot more variety between servers, but
equally it's a lot simpler to work with so is preferred by many developers
of both servers and clients.
One of the big differences between SOAP and REST is that REST often
applies meaning to the HTTP verb used - so in addition to GET and POST it
is also common to make use of the PUT and DELETE methods. PUT has the same
parameters as POST and DELETE typically has the same parameters as GET.
net.SetContentType('json')
net.SetAccept('json')
net.Post(url,data)
Advanced
REST is less structured than SOAP, so pretty much
anything goes. In some extreme cases the format of the request is
different to what is typical for a WebClient. For example a GET request
might include data like a POST and so on. For this reason all the
NetTalk methods (GET, PUT, POST, DELETE) support a second "data"
parameter. This parameter can be either a String or a StringTheory
object.
Compression
It is very common for the server to send you the
result in a compressed format. This is on by default, and invisible to you
as the programmer. The NetWebClient class sets a header (
Accept-Encoding:
gzip) which tells the server that compression is supported. If
the server supports it then it will send you the resulting page
compressed. This is on by default (as long as the
zlibwapi.dll
file is in the exe folder.) Again, this is invisible to you and you are
not even aware it is happening.
If you want to prevent this behaviour by the client, then call
net.AcceptEncoding = 'plain'
Content-Encoding
Far less common is the ability of the client to send
compressed data to the server. Most servers either do not support, or
are not configured, to accept compressed data. There is also no easy way
for the client to discover if the server supports it or not. So
client-side compression is typically only useful when you know the
server you are talking to supports it.
From NetTalk 14, the NetTalk server does support client-side
compression. So when you are communicating from a NetTalk Client to a
NetTalk Server, compression of the data is supported
[1],
and this can have a dramatic effect on transfer times. Any time you
control both the server and the client, this feature can substantially
improve transfer times, and reduce data costs.
This feature is activated in the client by calling;
net.SetClientCompressed(true)
before the call to POST. This sets a header for you, which is sent to
the server as
Content-Encoding: gzip
Note 1: The server
needs to have this feature turned on. Read more about the server side of
this feature at
Client
Side Compression.
TLS (SSL) Connections
Connecting over TLS using the HTTPS protocol is not
much different from connecting over non-secure connections using HTTP. The
WebClient class sits above the connection itself, therefore it has no
special code to deal with the connection.
The WebClient class does however inherit from the NetSimple class and so
the TLS related properties there are in use here as well.
The following table contains some of the most useful properties, however
this list is not exhaustive - see the NetSimple documentation for a
complete list of properties.
Property |
Description |
SSL |
Set to true if the connection is over, or will be over, TLS. You
do not need to set this, it is set automatically if the URL being
requests begins with HTTPS. |
SSLMethod |
The SSL (TLS) version to use when connecting to the server. The
default value is NET:SSLMethodTLS.
For more options on this method see the NetAll.Inc
file. |
SSLCertificateOptions.
ServerName |
If set then this is an alternate test for the server certificate
name. Usually the name has to match the hostname you are
connecting to, but if you know the certificate will have a wrong
(but fixed) name then you can enter the expected name here. |
SSLCertificateOptions.
DontVerifyRemoteCertificateCommonName |
If set to true then the common name of the server certificate is
not matched to the server the client is connecting to. This
setting should be used with caution - it allows for a
man-in-the-middle attack. |
SSLCertificateOptions.
DontVerifyRemoteCertificateWithCARoot |
If set to true then the server certificate is not tested against
the caroot.pem file to see if it is
trusted. Use this setting with caution, if set then the
communication with the server will be encrypted, but the server
itself is not trusted. This setting also allows for a
man-in-the-middle attack to take place. |
CertificateFile |
The location of a client-side certificate file. This is very
rarely used with web servers. |
PrivateKeyFile |
The location of a client-side private key file. This is very
rarely used with web servers. |
Class Reference
NetWebClient
Derivation
- NetWebClient ( NetWww.Inc / NetWww.Clw
)
Properties
Property |
Description |
AcceptEncoding |
Defaults to gzip - Tells the server that the response may be
compressed using the gzip algorithm. Responses that arrive
gzipped are automatically unzipped before being passed to the
PageReceived method. |
AsyncOpenTimeout |
The amount of time, in hundreds of a second, to wait before
an attempt to Open a request fails. The default value for this
setting is 900, or 9 seconds. |
Busy |
If this property is set then a response is being received
from the web server. |
BytesWritten |
the number of bytes written to the disk by the SavePage
method. |
CacheControl |
Allows you to set the Cache-Control header of a request
(before making the request). |
CanUseProxy |
Set to true if this object can access the URL via a Proxy
server. |
CustomHeader |
Allows you to add a custom header to the request. For
example;
net.customheader = 'xxx-whatever:
good-to-go' |
HeaderLen |
The length of the header part of the received page. |
HeaderOnly |
If this is set to true then the next request made to the
server will only fetch the Header part of the response from
the server. This allows you to determine the capabilities of
the server, as well as (possibly) the prospective size of the
response to the request, before asking for the actual
response. |
HTTPVersion |
As from build 9.20 the default for this is HTTP/1.1
- Previously it was HTTP/1.0. |
FormEncodeType |
Set to multipart/form-data if
the form will be submitted as a multipart form. |
OptionAutoCookie |
If set to true then incoming
cookies are automatically added to the queue and sent out with
subsequent requests. |
OptionDontRedirect |
If set to false (the default)
then a Redirect response (30x) from the server will
automatically be followed to the specified URL. |
OptionDontRedirectHTTPtoHTTPS |
This property is set to true by
default. This means the client will not auto-redirect from an
HTTP request to an HTTPS location. This will assist developers
in spotting where HTTP is used incorrectly, and fix it to the
correct location. This is important because the HTTP request
may contain sensitive information, like API keys, and making
the first request as HTTP exposes this information to packet
sniffers. In the past this URL error (using HTTP) would go
unnoticed because the server would likely return a redirect,
and the client would silently just go to the correct URL. |
OptionDontSetCookieOnRedirect |
If true stops the SetCookie
being put into the Cookie on Redirection |
OptionFinishOnEndHTMLTag |
This option (if set to true)
will cause PageReceived to be
called if the page we are receiving has no content-length, and
the last 7 characters are </html> |
PageContentLen |
The size of the incoming response from the server - if this
header has been set by the server before sending. |
PageChunked |
Is set to true if the response from the server is in chunked
format. |
Progress |
A property that contains the progress percentage (from 1 to
100) of the incoming reply from a server. |
ProgressControl |
A property that contains the FEQ of a Progress bar control
on the window. If set then uploads and downloads will
automatically give progress feedback to the user as the upload
and download happens. For more information see Progress
Bar Control. |
RangeStart
Range End |
Allows the client to set a range of bytes (0 based, not 1
based) from the file being fetched.
Not all servers support ranges. If a server returns a header;
Accept-Ranges: none
then it definitely does not support ranges. If it
returns a header
Accept-Ranges: bytes
then it definitely does support ranges. If it returns
neither of these then it may, or may not, support ranges.
A NetTalk 10 server supports range requests for static files,
but not for dynamically generated pages. |
SOAPAction |
Set this to the value of the SOAPAction
header as required by SOAP 1.1 servers, before doing
a request. See SOAP. |
ThisPage |
A StringTheory object containing the response from the
remote server. This property is set when the PageReceived
method is called. |
Methods
Method |
Description |
CreateAuthorizationString |
See NetWebHttp
CreateAuthorizationString |
Delete |
Sends a DELETE request to a web server. |
DeleteCookie |
Deletes a cookie from the cookie queue. |
ErrorTrap |
See NetSimple ErrorTrap. |
Get |
Sends a GET request to a web server. |
Fetch |
See Get. |
PageReceived |
Is called when a response is received from the server. |
Patch |
Sends a PATCH request to a web server. |
Post |
Sends a POST request to a web server. |
Put |
Sends a PUT request to a web server. |
RemoveHeader |
Removes the header part of a response from the server. |
SavePage |
Saves the data part of the page, not the header, to a file
on the disk. |
SetAccept |
Sets the Accept header for the outgoing request |
SetAllHeadersDefault |
Sets all the headers values for requests back to their
default state. |
SetContentType |
Sets the Content Type header for the outgoing request. |
SetCookie |
See NetWebHttp SetCookie |
SetValue |
Sets a Form Field value in preparation for doing a Post or
Put. |
Start |
Sets the object back to a virgin state. |
Delete
Delete (String
p_Url,[String p_PostString | StringTheory p_PostString])
Description
Makes a call to the server using the DELETE verb.
Parameters
Parameter |
Description |
p_Url |
The fully formed URL containing the host, path, and resource
of the parameters. URL encoded parameters can also be used here. |
p_PostString |
An optional string (or StringTheory object) which is sent to
the server as part of the request. This data is sent as "Post
Data" (ie after the HTTP header) even though a DELETE typically
does not expect Post data. This parameter is only rarely used
when talking to a server that requires Post data with a DELETE
request. |
Return Value
The method returns nothing.
See Also
Post,
Put,
Get,
Patch
DeleteCookie
DeleteCookie
(String p_Name)
Description
Deletes a cookie from the cookie queue.
Parameters
Parameter |
Description |
p_Name |
The name of the cookie to delete. |
Return Value
The method returns nothing.
See Also
SetCookie
Get / Fetch
Get (String
p_Url,[String p_PostString | StringTheory p_PostString])
Fetch (String p_Url)
Description
Makes a call to the server using the GET verb. Either the GET or FETCH
method name can be used, they do the same thing.
Parameters
Parameter |
Description |
p_Url |
The fully formed URL containing the host, path, and resource
of the parameters. URL encoded parameters can also be used here. |
p_PostString |
An optional string (or StringTheory object) which is sent to
the server as part of the request. This data is sent as "Post
Data" (ie after the HTTP header) even though a GET typically
does not expect Post data. This parameter is only rarely used
when talking to a server that requires Post data with a GET
request. |
Return Value
The method returns nothing.
See Also
Post,
Put,
Delete,
Patch
PageReceived
PageReceived ()
Description
Is called when a response is received from the server. The whole
response (including the header and data) is in the ThisPage property. A
request is sent to the server using one of the request methods,
Get,
Post,
Put,
Delete or
Patch.
This is one of the most important embed points in the class because it
determines what you do with the response from the server.
Examples
To remove the header at this point call the RemoveHeader method.
self.RemoveHeader()
something = self.ThisPage.GetValue()
To save the page (with the header removed, even if you have not called
RemoveHeader) call the SavePage method.
self.SavePage(filename)
To save the page, with the header included
self.thispage.saveFile(filename)
Return Value
The method returns nothing.
See Also
Get,
Put,
Delete,
Post,
Patch,
RemoveHeader,
SavePage
Patch
Patch (String
p_Url,[String p_PostString | StringTheory p_PostString])
Description
Makes a call to the server using the PATCH verb.
Parameters
Parameter |
Description |
p_Url |
The fully formed URL containing the host, path, and resource
of the parameters. URL encoded parameters can also be used here. |
p_PostString |
An optional string (or StringTheory object) which is sent to
the server as part of the request. This data is sent as "Post
Data" - ie after the HTTP header. |
Return Value
The method returns nothing.
See Also
Get,
Put,
Delete,
Post
Post
Post (String
p_Url,[String p_PostString | StringTheory p_PostString])
Description
Makes a call to the server using the POST verb.
Parameters
Parameter |
Description |
p_Url |
The fully formed URL containing the host, path, and resource
of the parameters. URL encoded parameters can also be used here. |
p_PostString |
An optional string (or StringTheory object) which is sent to
the server as part of the request. This data is sent as "Post
Data" - ie after the HTTP header. |
Return Value
The method returns nothing.
See Also
Get,
Put,
Delete,
Patch
Put
Put (String
p_Url,[String p_PostString | StringTheory p_PostString])
Description
Makes a call to the server using the PUT verb.
Parameters
Parameter |
Description |
p_Url |
The fully formed URL containing the host, path, and resource
of the parameters. URL encoded parameters can also be used here. |
p_PostString |
An optional string (or StringTheory object) which is sent to
the server as part of the request. This data is sent as "Post
Data" - ie after the HTTP header. |
Return Value
The method returns nothing.
See Also
Get,
Post,
Delete,
Patch
RemoveHeader
RemoveHeader ()
Description
Removes the header part of the response from the
thispage
property.
Example
In the
PageReceived method.
self.RemoveHeader()
something = self.ThisPage.GetValue()
Return Value
The method returns nothing.
See Also
PageReceived
SavePage
SavePage (string
p_FileName)
Description
Saves the data part, not the header, to a file on the disk.
Parameters
Parameter |
Description |
p_FileName |
The name, and path, of the file to save. If the file exists it
will be overwritten. |
Example
In the
PageReceived method.
self.SavePage('c:\temp\a.png')
Return Value
The method returns nothing. The
BytesWritten property
is updated to indicate the number of bytes written to the disk.
See Also
PageReceived
SetAccept
SetAccept(String
pType)
Description
Sets the Accept_ property (and hence the Accept header) for the outgoing
request.
The Accept header tells the server what format to use for the reply. In
most cases this header is ignored, unless the server has a choice of
what to return. For example a Web Service API may allow you to choose
between an XML or JSON response.
Parameters
Parameter |
Description |
pType |
The name of a file, or extension, which indicates the type of
data being requested. Most often is one of
'xml', or 'json' or left
as the default value. |
Example
To set it to be XML
net.SetAccept('xml')
To set it to be JSON
net.SetAccept('json')
Return Value
The method returns nothing.
See Also
SetContentType
SetAllHeadersDefault
SetAllHeadersDefault()
Description
Sets all the headers for a request back to their default state.
Example
net.SetAllHeadersDefault()
Return Value
The method returns nothing.
See Also
Start
SetContentType
SetContentType
(String pType)
Description
Sets the ContentType property (and hence the Content-Type header) for
the outgoing request.
The Content-Type header tells the server what format is being used for
the data attached to the request. This applies to Post data, typically
sent with the
Post or
Put
method.
If this method is not called then the content-type will default to
blank, which is then either set to
application/x-www-form-urlencoded
or
multipart/form-data if the data includes
a disk file.
Parameters
Parameter |
Description |
pType |
The name of a file, or extension, which indicates the type of
data being used in the request. Most often is one of
'xml', or 'json' or left
as the default value. |
Example
To force it to be
application/x-www-form-urlencoded
net.SetContentType('form')
To force it to be
multipart/form-data
net.SetContentType('multipart')
To set it to be XML
net.SetContentType('xml')
To set it to be JSON
net.SetContentType('json')
Return Value
The method returns nothing.
See Also
SetValue,
Post,
Put,
SetAccept
SetValue
SetValue (String
pName, String pValue, Long pFile=0, <String pContentType>,
<String pCustomHeader>)
Description
When a Post or Put method is sent to a server then additional data is
also usually sent to the server.
If the Post data format is multipart/form-data or
application/x-www-form-urlencoded then the values (including files) can
be added to the post using this method.
Parameters
Parameter |
Description |
pName |
The name of the field. |
pValue |
The value of the field. If the value is a file attachment on
the disk then set this to be the path, and filename, of the file
on the disk. |
pFile |
If the value field contains a filename then set this to true.
|
pContentType |
If the field has a custom Content-Type then set it here. If
omitted then the content type is set based on the extension of
the filename. |
pCustomHeader |
If a custom header has to be included with the field then set
it here. |
Example
net.SetValue('name','nettalk')
net.setvalue('invoice','c:\temp\invoices.pdf',true) ! content-type is
application/pdf
net.setvalue('logo','c:\temp\logo',true,'bmp')
Return Value
The method returns nothing.
See Also
Post Data to a Web Server
Start
Start()
Description
Sets all the object back to a virgin state.
Example
net.start()
Return Value
The method returns nothing.
See Also
SetAllHeadersDefault
ClassNetWebHttp
Derivation
- NetWebHttp ( NetHttp.Inc /
NetHttp.Clw )
Properties
Property |
Description |
Authorization |
Contains the header used to authenticate with the server,
based on the user name and password. |
ProxyAuthorization |
Contains the header used to authenticate with the proxy
server, based on the user name and password. |
AuthUser |
The UserName used in the most recent call to CreateAuthorizationString |
authPassword |
The Password used in the most recent call to CreateAuthorizationString |
Methods
Method |
Description |
CreateAuthorizationString |
Generates an authorization string based on a user name and
password. Supports Basic and Digest authentication. |
CreateAuthorizationStringOAuth1 |
Generates an authorization string based on tokens for
communicating with an OAuth1 Web Service. |
CreateGMTDate
CreateUTCDate |
Create a date time stamp of the form Fri, 8 Oct 2004
16:54:48 GMT |
DontSendCookie |
Delete a cookie from the cookie queue |
GetContentType |
Return the appropriate content-type value based on a
filename |
SetCookie |
Add, or change, a cookie in the cookie queue. |
CreateAuthorizationString
CreateAuthorizationString
(string p_UserName, string p_Password, long p_AuthorizationMethod,
long p_Options=0)
Description
Generates an authorization string based on a user name and password.
Authorization strings are used in HTTP headers when authenticating with
the server as either BASIC or DIGEST authentication.
If given a choice, then BASIC authentication is recommended for servers
connected to over HTTPS - DIGEST authentication is recommended for
servers connected to over HTTP.
Parameters
Parameter |
Description |
p_Username |
The user name to include in the authorisation string. |
p_Password |
The password to include in the authorisation string. |
p_AuthorizationMethod |
One of Net:WebBasicAuthentication
or Net:WebDigestAuthentication |
p_Options |
st:NoWrap - do not wrap the result. Recommended. (Basic
Authentication Only)
net:proxy - authenticate against proxy server - (Digest Only) |
Return Value
The method returns the Authentication string. It is then most commonly
assigned to the
Authorization property.
When this method is called the AuthUser and Password properties are
automatically updated to these values.
Example
net.Authorization =
net.CreateAuthorizationString(User,Password,Net:WebBasicAuthentication,true)
See Also
Authentication
CreateAuthorizationStringOAuth1
CreateAuthorizationStringOAuth1
(String pVerb, String pUrl, AuthParametersGroup pParms)
Description
Used by the OAuth class to generate the Authorization header string for
OAuth 1 requests.
Parameters
Parameter |
Description |
pVerb |
The HTTP verb being used. For example, GET, POST, PUT, DELETE |
pUrl |
The URL being connected to |
pParms |
a AuthParametersGroup. (Same as a
oAuthParametersGroup). Typically passed to, and back from
the NetOAuth class. |
Return Value
The method returns the Authentication string. It is then most commonly
assigned to the
Authorization property.
Example
s group(AuthParametersGroup).
code
s = whatever
self.Authorization =
self.CreateAuthorizationStringOAuth1('GET',pRequestTokenURL, s )
See Also
OAuth
CreateGMTDate / CreateUTCDate
CreateGMTDate
(long p_Date=0, long p_Time=0)
CreateUTCDate (long p_Date=0, long p_Time=0)
Description
Create a date time stamp of the form Fri, 8 Oct 2004 16:54:48 GMT.
Local time is automatically converted to UTC time when generating the
timestamp.
Parameters
Parameter |
Description |
p_Date |
The date of the time stamp. If omitted, or 0, then defaults to
today. |
p_Time |
The time of the time stamp. If omitted, or 0, then defaults to
today. |
Return Value
The method returns a string of the form Dayname, DayNumber MonthName
Year Time GMT
See Also
DontSendCookie
DontSendCookie
(String p_Name)
Description
Deletes a cookie from the cookie queue. This method is used by the
WebServer only, for the WebClient see DeleteCookie.
Parameters
Parameter |
Description |
p_Name |
The name of the cookie to delete. |
Return Value
The method returns nothing.
See Also
SetCookie
GetContentType
GetContentType
(string p_FileName)
Description
Return the appropriate content-type header value based on a filename.
Parameters
Parameter |
Description |
p_FileName |
The name of the file (or extension) to return the content-type
for. |
Return Value
The method returns a content-type string suitable for being applied to
the content header.
Example
s =
net.GetContentType('json')
s = net.GetContentType('c:\temp\whatever.jpg')
See Also
Post Data to a Web Server
SetCookie
SetCookie (String
p_name, String p_Value, <Long p_Date>, <Long p_Time>,
<Long p_Secure>, <String p_Path>, <String p_Domain>,
Long p_HttpOnly=0)
Description
Adds a cookie to the cookie queue. The cookies in the cookie queue are
automatically included on the next (and subsequent) calls to the server.
Parameters
Parameter |
Description |
p_Name |
The name of the cookie to add. |
p_Value |
The value of the cookie to add. |
p_Date |
(server only) The date on which the cookie expires. |
p_Time |
(server only) The time on which the cookie expires. |
p_Secure |
(server only) If set then the cookie will only be used on
secure (HTTPS) connections. |
p_Path |
(server only) The Path attribute for the cookie. |
p_Domain |
(server only) The Domain attribute of the cookie |
p_HttpOnly |
(server only) If set then the cookie is only available to the
browser, and not to JavaScript running in the browser. |
Return Value
The method returns nothing.
See Also
For more information on cookie attributes see
Wikipedia.
Cookies
NetWebRoot
Derivation
- NetWebRoot ( NetHttp.Inc / NetHttp.Clw )
Methods
Method |
Description |
NormalizeURL |
Changes \ in a URL to /, makes sure the parameter-separator
is a ?, and all the other parameters are separated by a ? |
GetHeaderField |
Get a header field value from a request or a response. |
NormalizeURL
NormalizeURL
(String pURL)
Description
Changes \ in a URL to /, makes sure the parameter-separator is a ?, and
all the other parameters are separated by a ?
Parameters
Parameter |
Description |
p_Url |
The fully formed URL containing the host, path, and resource
of the parameters. URL encoded parameters can also be used here. |
Return Value
The method returns a string containing the normalized URL.
See Also
GetHeaderField
GetHeaderField
(string p_SearchString, StringTheory p_MainString | *string
p_MainString, long p_StartPos=1, long p_EndPos=0, long
p_CaseInsensitive=true)
Description
Get a header field value from a request or a response.
Parameters
Parameter |
Description |
p_SearchString |
The header value to look for. |
p_MainString |
The string, or StringTheory object, containing the request, or
response. |
p_StartPos |
The start position in the string to commence the search. If
omitted, or 0, then the start of the string is used. |
p_EndPos |
The end position in the string to search for the header. If
omitted or 0 then the end of the string is used. |
p_CaseInsensitive |
If true (the default value) then
the header name is considered to be case insensitive. |
Return Value
The method returns a string containing the value of the header field. If
the header is not found then a blank string is returned.
Example
result = self.GetHeaderField
('content-length',self.thispage)
[End of this document]