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/