如何使用WinInet的API来发送一个HTTP POST请求在Delphi-delphi

如何使用WinInet的API来发送一个HTTP POST请求在Delphi-delphi,第1张

1. 我把所有的URL /与代码竖悉。我这个来自杰夫・德沃尔现在,它的精细工作:function request(const AUrl, AData: AnsiStringblnSSL: Boolean = True): AnsiString

var

aBuffer : Array[0..4096] of Char

Header : TStringStream

BufStream : TMemoryStream

sMethod : AnsiString

BytesRead : Cardinal

pSession : HINTERNET

pConnection : HINTERNET

pRequest : HINTERNET

parsedURL : TStringArray

port : Integer

flags : DWord

begin

ParsedUrl := ParseUrl(AUrl)

Result := ''

pSession := InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0)

if Assigned(pSession) then

try

if blnSSL then

Port := INTERNET_DEFAULT_HTTPS_PORT

else

Port := INTERNET_DEFAULT_HTTP_PORT

pConnection := InternetConnect(pSession, PChar(ParsedUrl[0]), port, nil, nil, INTERNET_SERVICE_HTTP, 0, 0)

if Assigned(pConnection) then

try

if (AData = '') then

sMethod := 'GET'

else

sMethod := '神歼POST'

if blnSSL then

flags := INTERNET_FLAG_SECURE or INTERNET_FLAG_KEEP_CONNECTION

else

flags := INTERNET_SERVICE_HTTP

pRequest := HTTPOpenRequest(pConnection, PChar(sMethod), PChar(ParsedUrl[1]), nil, nil, nil, flags, 0)

if Assigned(pRequest) then

try

Header := TStringStream.Create('')

try

with Header do

begin

WriteString('Host: ' + ParsedUrl[0] + sLineBreak)

WriteString('User-Agent: Custom program 1.0'+SLineBreak)

WriteString('Accept: text/html,application/xhtml+xml,application/xmlq=0.9,*/*q=0.8'+SLineBreak)

WriteString('游纤冲Accept-Language: en-us,enq=0.5' + SLineBreak)

WriteString('Accept-Charset: ISO-8859-1,utf-8q=0.7,*q=0.7'+SLineBreak)

WriteString('Keep-Alive: 300'+ SLineBreak)

WriteString('Connection: keep-alive'+ SlineBreak+SLineBreak)

end

HttpAddRequestHeaders(pRequest, PChar(Header.DataString), Length(Header.DataString), HTTP_ADDREQ_FLAG_ADD)

if HTTPSendRequest(pRequest, nil, 0, Pointer(AData), Length(AData)) then

begin

BufStream := TMemoryStream.Create

try

while InternetReadFile(pRequest, @aBuffer, SizeOf(aBuffer), BytesRead) do

begin

if (BytesRead = 0) then Break

BufStream.Write(aBuffer, BytesRead)

end

aBuffer[0] := #0

BufStream.Write(aBuffer, 1)

Result := PChar(BufStream.Memory)

finally

BufStream.Free

end

end

finally

Header.Free

end

finally

InternetCloseHandle(pRequest)

end

finally

InternetCloseHandle(pConnection)

end

finally

InternetCloseHandle(pSession)

end

end

ParseUrl是一个函数,在分割“/和TStringArray是一个字符串数组的URL。我还是要检查代码的明天,但它看起来很好,在我的嗅探器,我看到后数据被发送了头。

2. 我个人比较喜欢的突触库为我所有的TCP / IP协议的工作。例如,一个简单的HTTP post可以编码为:uses

httpsend

function testpost

begin

stm := tStringstream.create('param=value')

try

HttpPostBinary(' CodeGo.net

finally

stm.free

end

end

该库是写得很好,很容易修改以满足您的特定最新发布的颠覆不工作为德尔福2009年和2010年德尔福的任何问题。这是基于,而是是一系列的类和其良好的多线程

3. 第三个(以HttpOpenRequest应该是你想要求的URL。这就是为什么描述的五分之一(lpszReferer)为“一个指向一个空结束的字符串,指定从哪个(获得了在请求的URL的URL。” 已发布的数据获取与发送HttpSendRequest该lpOptional描述是这样的: 指向包含请求头之后发送任何可选的数据缓冲区。这对于POST和PUT *** 作。可选的数据可以被发送到服务器的资源。这可以是NULL如果不存在可选的数据发送。 第二至InternetOpen应该只是服务器,它不应该包含的协议。你与第六指定协议 当你发送的请求,您可以阅读与回应InternetReadFile和InternetQueryDataAvailable。 不要只检查是否API函数返回零,然后继续下一行。如果他们失败了,调用GetLastError找出原因。你已经发布的代码不会引发异常,所以这是徒劳的,以捕捉任何。 (和它的愚蠢的“处理”他们你这样做反正的方式。不要捕捉异常,你还不知道如何解决。让一切上去给调用者,或来电者的来电,等。)

var

fhttpRequest: TIdHTTP

PostData : TStringStream

tmpStr : String

begin

fhttpRequest := TIdHTTP.Create(nil)

  fhttpRequest.HandleRedirects := True//猜晌允许头转向

  fhttpRequest.ReadTimeout := 5000//贺兆芹请求禅毕超时设置

  fhttpRequest.Request.ContentType := 'application/x-www-form-urlencoded'//设置内容类型为json

  PostData := TStringStream.Create('')

  //PostData.Position := 0//将流位置置为0

  PostData.WriteString('encode=773130f7236b15405c9497c19bf24a038ba04197f017bfb0dd66d455bcb75e9e580')

  PostData.WriteString('302a5d177cae445ae6c97be24a74344c2cade3dee0015cda9e3ef05a71a9b32409f7d026e633a8125d8d62298aa1a5d35c50e40dc316a07b355d4f70b712b73f37befe911824a78ec556556951d2bf76ec4944e73cbc3b2b88ada31a85b09')

  tmpStr := fhttpRequest.Post('http://10.32.8.34:8081/phis/EncodeServlet',PostData)//tmpStr是提交后返回的数据

  fhttpRequest.free

  PostData.Free

  Result:=tmpStr

end


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12279805.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存