Mike,
$1 is the server
$2 is the path on the server
$5 is a point to a blob containing the data to send
Here's an example of a calling method:
C_BLOB($1;vtXML;response)
C_TEXT($2) ` ID number of the black box record
COPY BLOB($1;vtXML;0;0;BLOB size($1))
`Encode the blob data so it's URL friendly, the blob contains an XML file)
CODEC_Encode_URL_z (->vtXML)
` Append some parameters, so the receiving web page knows what we are
sending (these are form post variables)
PDF_ENGINE_APPEND_BLOB ("bbid="+$2+"&data=";0)
` This removes the HTTP from the beginning of the black box server
location, as we just want the domain name
$vtURL:=Replace string([System_Preferences]Black_Box_URL;"http://";"")
` Send the request
$error:=HTTP_Send_Request
($vtURL;"/blackbox/admin/export.php";"POST";->response;->vtXML)
` response contains the response data
HTH
James.
On 1 September 2010 17:09, Mike Erickson <[email protected]> wrote:
> James
>
> Thanks! I have some code to do it (but it is old code and doesnt seem to
> work anymore) so I figured I would ask this list :-)
>
> I will give this routine a whirl and see how it goes.
>
> Reviewing the code, what does $2 (path) and $5 (point to data to post)
> contain? Do you have a calling example?
>
>
>
> Regards
>
> Michael S. Erickson
> [email protected]
>
> On Sep 1, 2010, at 9:06 AM, James Wright wrote:
>
>> Mike,
>>
>> Some kind person gave me this code:
>>
>> ` (PM) HTTP_SendRequest
>> ` Performs the actual HTTP request
>> ` $1 - URL
>> `$2 - Path
>> `$3 - request method GET/POST
>> `$4 - pointer to response blob
>> `$5 - point to data to post
>> C_TEXT($1;$host)
>> C_TEXT($2;$path)
>> C_TEXT($3;$requestMethod;$headers;$path;$crlf;$options)
>> C_POINTER($4;$response)
>> C_LONGINT($0;$error;$socket;$timeoutAt;$bytesSend;$position)
>> C_BLOB($data)
>> C_POINTER($5;$http_data)
>> $host:=$1
>> $path:=$2
>> $requestMethod:=$3
>> $response:=$4
>> $error:=-1
>> $http_data:=$5
>> $http_timeout:=60 `a minute
>>
>> $pos:=Position(":";$host)
>> If ($pos>7)
>> $host:=Substring($host;1;$pos-1)
>> $port:=Num(Substring($host;$pos+1;32000))
>> Else
>> $port:=80
>> End if
>> ` Clear the response blob
>> SET BLOB SIZE($response->;0)
>>
>> ` If we have a GET request append the data as request parameters
>> If (($requestMethod="GET") & (BLOB size($http_data->)>0))
>> $path:=$path+"?"+BLOB to text($http_data->;Text without length )
>> End if
>> ` Build the HTTP headers
>> $crlf:=Char(Carriage return )+Char(Line feed )
>> $headers:=$requestMethod+" "+$path+" HTTP/1.1"+$crlf
>> $headers:=$headers+"User-Agent: 4D HTTP Client"+$crlf
>> $headers:=$headers+"Host: "+$host+$crlf
>> $headers:=$headers+"Accept: */*"+$crlf
>> $headers:=$headers+"Connection: close"+$crlf
>> ` For a POST request we need to add a content-length header
>> If ($requestMethod="POST")
>> $headers:=$headers+"Content-Length: "+String(BLOB size($http_data->))+$crlf
>> $headers:=$headers+"Content-Type: application/x-www-form-urlencoded"+$crlf
>> End if
>> ` Important: the headers must end with a blank line
>> $headers:=$headers+$crlf
>> ` Convert the headers to a blob
>> TEXT TO BLOB($headers;$data;Text without length )
>> ` For a POST request we append the data to the headers
>> If ($requestMethod="POST")
>> COPY BLOB($http_data->;$data;0;BLOB size($data);BLOB size($http_data->))
>> End if
>>
>> $error:=TCP_Open ($host;$port;$socket;0)
>> ` If we have a connection
>> If ($socket#0)
>> ` Send the request
>> $bytesSend:=TCP_SendBLOB ($socket;$data)
>> $state:=TCP_State ($socket)
>> $timeoutAt:=Milliseconds+($http_timeout*1000)
>> SET BLOB SIZE($data;0)
>> $state:=TCP_State ($socket)
>> Repeat ` Get the response (wait until the connection is closed)
>> If (TCP_ReceiveBLOB ($socket;$data)=0)
>> COPY BLOB($data;$response->;0;BLOB size($response->);BLOB size($data))
>> Else
>> DELAY PROCESS(Current process;1)
>> End if
>> Until (BLOB size($data)>0) | (Milliseconds>$timeoutAt)
>> ` Close the connection
>> $error:=TCP_Close ($socket)
>> ` Strip the HTTP headers from the response
>> $headers:=BLOB to text($response->;Text without length )
>> $position:=Position($crlf+$crlf;$headers)
>> If ($position>0)
>> $error:=0
>> $position:=$position+4
>> DELETE FROM BLOB($response->;0;$position-1)
>> End if
>> End if
>> $0:=$error
>>
>>
>> Best
>>
>> James.
>>
>>
>> Drag+drop Ltd
>> Suite 6 Chichester House, 45 Chichester Road, Southend-on-Sea, Essex,
>> England, SS1 2JU
>> www.draganddrop.co.uk • [email protected]
>> +44 (0) 1702 616895 • +44 (0) 8000 432212
>> Reg no. 04203263
>>
>>
>> On 1 September 2010 16:26, Mike Erickson <[email protected]> wrote:
>>>
>>> Hey Gang
>>>
>>> I have a need to send some HTTP requests to another site and am curious if
>>> this is possible with native A4D of anybody has some code they would be
>>> willing to share to do this. It can be a 4D method (I will execute the
>>> code within the database) or A4D script call.
>>>
>>> Regards,
>>>
>>> Mike Erickson
>>> Automated Solutions Group
>>> [email protected]
>>> _______________________________________________
>>> Active4D-dev mailing list
>>> [email protected]
>>> http://mailman.aparajitaworld.com/mailman/listinfo/active4d-dev
>>> Archives: http://mailman.aparajitaworld.com/archive/active4d-dev/
>> _______________________________________________
>> Active4D-dev mailing list
>> [email protected]
>> http://mailman.aparajitaworld.com/mailman/listinfo/active4d-dev
>> Archives: http://mailman.aparajitaworld.com/archive/active4d-dev/
>
> _______________________________________________
> Active4D-dev mailing list
> [email protected]
> http://mailman.aparajitaworld.com/mailman/listinfo/active4d-dev
> Archives: http://mailman.aparajitaworld.com/archive/active4d-dev/
>
_______________________________________________
Active4D-dev mailing list
[email protected]
http://mailman.aparajitaworld.com/mailman/listinfo/active4d-dev
Archives: http://mailman.aparajitaworld.com/archive/active4d-dev/