URL未返回数据Delphi Indy TIdHttp
我正在尝试使用TidHttpIndy工具访问Delphi中的URL。 我已经做了以下工作:URL未返回数据Delphi Indy TIdHttp,delphi,indy,idhttp,Delphi,Indy,Idhttp,我正在尝试使用TidHttpIndy工具访问Delphi中的URL。 我已经做了以下工作: 设置接受Cookies=True 设置句柄重定向=True 添加了一个TIdCookieManager http://sms.saicomvoice.co.za:8900/saicom/index.php?action=login&username=SOME_USERNAME&password=SOME_PASSWORD&login=login Post请求工作并返回HTML。问题是它没有返回正确的H
- 设置接受Cookies=True
- 设置句柄重定向=True
- 添加了一个TIdCookieManager
http://sms.saicomvoice.co.za:8900/saicom/index.php?action=login&username=SOME_USERNAME&password=SOME_PASSWORD&login=login
Post请求工作并返回HTML。问题是它没有返回正确的HTML(见下图)
如果我使用该URL(填写用户名和密码)并将其粘贴到浏览器中,与我的Delphi应用程序完全相同,则会登录到正确的网站。但是,只要我用我的Delphi应用程序执行此操作,它就会返回登录页面的HTML
请求应该在Delphi中的TTimer中定时执行
有谁能引导我走上正确的道路,或者为我指明一个方向,告诉我如何解决这个问题
一些附加信息
- WriteStatus是将输出写入TListBox的过程
- BtnEndPoll停止计时器
Procedure TfrmMain.TmrPollTimer(Sender: TObject); Var ResultHTML: String; DataToSend: TStringList; Begin Inc(Cycle, 1); LstStatus.Items.Add(''); LstStatus.Items.Add('=================='); WriteStatus('Cycle : ' + IntToStr(Cycle)); LstStatus.Items.Add('=================='); LstStatus.Items.Add(''); DataToSend := TStringList.Create; Try WriteStatus('Setting Request Content Type'); HttpRequest.Request.ContentType := 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'; WriteStatus('Setting Request User Agent'); HttpRequest.Request.UserAgent := 'Mozilla/5.0 (Windows NT 5.1; rv:2.0b8) Gecko/20100101 Firefox/4.0b8'; WriteStatus('Posting Request'); ResultHTML := HttpRequest.Post(FPostToURL, DataToSend); WriteStatus('Writing Result'); FLastResponse := ResultHTML; WriteStatus('Cycle : ' + IntToStr(Cycle) + ' -- FINISHED'); LstStatus.Items.Add(''); Except On E: Exception Do Begin MakeNextEntryError := True; WriteStatus('An Error Occured: ' + E.Message); If ChkExceptionStop.Checked Then Begin BtnEndPoll.Click; WriteStatus('Stopping Poll Un Expectedly!'); End; End; End; End;
ContentType
值。此类值属于请求。请改为接受属性。它告诉服务器客户端将在响应中接受哪些内容类型
结果tml:=HttpRequest.Post(FPostToURL,DataToSend)
您正在发布一个空白的TStringList
。将URL放入浏览器的地址栏会发送一个GET
请求,而不是POST
请求,因此您应该使用TIdHTTP.GET()
:
ResultHTML := HttpRequest.Get('http://sms.saicomvoice.co.za:8900/saicom/index.php?action=login&username=SOME_USERNAME&password=SOME_PASSWORD&login=login');
如果要模拟提交到服务器的HTML Web表单(因为它指定了method=Post
),则可以使用TIdHTTP.Post()
,例如:
您可以将HTML的相关部分改为文本吗?我添加了Get请求,但出于某种原因,它似乎没有发布实际数据,因为它仍然返回登录页面HTMLNever Mind。我发现了问题并解决了它。谢谢你的解决方案
DataToSend.Add('username=SOME_USERNAME');
DataToSend.Add('password=SOME_PASSWORD');
DataToSend.Add('login=Login');
ResultHTML := HttpRequest.Post('http://sms.saicomvoice.co.za:8900/saicom/index.php?action=login', DataToSend);