google上找的,试了几个网站,有的网站不成功。
Using Indy idHTTP to post binary and text
Note: Click Title to view in Edit Box for easier copying.
This is a small example of using post to send data to web server.
There is two different ways to do this operation.
Example 1:
<----------------------------------------------------------------->
procedure TForm1.SendPostData
Const
CRLF = #13#10
Var
aStream: TMemoryStream
Params: TMemoryStream
S: String
begin
aStream := TMemoryStream.create
Params := TMemoryStream.Create
HTTP.Request.ContentType := 'multipart/form-data
boundary=-----------------------------7cf87224d2020a'
try
S := '-----------------------------7cf87224d2020a' + CRLF +
'Content-Disposition: form-data
name="file1"
filename="c:abc.txt"' +
CRLF +
'Content-Type: text/plain' + CRLF + CRLF +
'file one content. Contant-Type can be application/octet-stream or if
you want you can ask your OS fot the exact type.' + CRLF +
'-----------------------------7cf87224d2020a' + CRLF +
'Content-Disposition: form-data
name="sys_return_url2"' + CRLF + CRLF +
'hello2' + CRLF +
'-----------------------------7cf87224d2020a--'
Params.Write(S[1], Length(S))
with HTTP do begin
try
HTTP.Post('http://www.mydomain.com/postexampe.cgi', Params,
aStream)
except
on E: Exception do
showmessage('Error encountered during POST: ' + E.Message)
end
end
aStream.WriteBuffer(#0' ', 1)
showmessage(PChar(aStream.Memory))
except
end
end
<----------------------------------------------------------------->
Example 2:
<----------------------------------------------------------------->
procedure TForm1.SendPostData
Var
aStream: TMemoryStream
Params: TStringStream
begin
aStream := TMemoryStream.create
Params := TStringStream.create('')
HTTP.Request.ContentType := 'application/x-www-form-urlencoded'
try
Params.WriteString(URLEncode('sys_return_url=' + 'helo1' + '&'))
Params.WriteString(URLEncode('sys_return_url=' + 'helo2'))
with HTTP do begin
try
HTTP.Post('http://www.mydomain.com/postexampe.cgi', Params,
aStream)
except
on E: Exception do
showmessage('Error encountered during POST: ' + E.Message)
end
end
aStream.WriteBuffer(#0' ', 1)
showmessage(PChar(aStream.Memory))
except
end
end
<----------------------------------------------------------------->
As you can see there is a difference in the way post stream is constructed
and the ContentType. In the first example ContentType is
"multipart/form-data
boundary=-----------------------------7cf87224d2020a"
and this boundary is used to separate different parameters.
In the second example the ContentType is
"application/x-www-form-urlencoded".
In this case the paremeteras are passed in the form
ParamName=ParamValue&ParamName=ParamValue
Note that the Pramaeters in the second form must be URL encoded.
Where these two formats of post information are used?
The first one is used when you have binary data to post and the second one
is when you are going to post only text fields.
Doychin - Team Indy
doychin@dsoft-bg.com
WebPage: http://www.nevrona.com/indy/