indy 9在POST到https .aspx页面时返回404错误

时间:2016-01-16 23:41:18

标签: delphi https indy

我使用带有0的Indy 9 TIdHTTP组件发布到aspx页面(https://www.thedogs.co.nz/catch-the-action/results.aspx),以模拟浏览器中发生的事情以查看特定的月份比赛结果。 下面的代码应该下载2015年11月的结果。

首先,我获取URL然后解析它以提取TIdSSLIOHandlerSocket(theVS),__VIEWSTATE(theVSG)和__VIEWSTATEGENERATOR(theEV)的值。

然后我这样做:

__EVENTVALIDATION

Sl是with HTTP do begin AllowCookies := True; ProxyParams.BasicAuthentication := False; ProxyParams.ProxyPort := 0; Request.ContentLength := -1; Request.ContentRangeEnd := 0; Request.ContentRangeStart := 0; Request.Accept := 'text/html, */*'; Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; rv:42.0)Gecko/20100101 Firefox/42.0'; Request.ContentType:= 'application/x-www-form-urlencoded'; Request.ContentEncoding := 'utf-8'; HTTPOptions := [hoForceEncodeParams]; end; ,M是TStringList

TMemoryStream

然而我回来的却是例外

  

HTTP / 1.1 404 Not Found

最值得赞赏的任何帮助!!

2 个答案:

答案 0 :(得分:1)

您没有正确格式化TStringList内容。您需要删除"&字符,并且不要对值进行url编码。格式化实际的HTTP请求时,Post()会在内部处理所有这些内容。

您还设置了一些您不需要设置的Request属性,或者设置为无效值。

在您Get()页面上检索Cookie和ViewState数据之后,在后续请求中,您没有将Request.Referer属性设置为相同的URL。只要一个页面上的链接或表单用于访问另一个页面,就需要相应地设置Referer标题。一些服务器验证确保请求来自正确的地方。

试试这个:

with HTTP do
begin
  AllowCookies := True;
  ProxyParams.BasicAuthentication := False;
  ProxyParams.ProxyPort := 0;
  Request.Accept := 'text/html, */*';
  Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0;  rv:42.0)Gecko/20100101 Firefox/42.0';
  HTTPOptions := [hoForceEncodeParams];
end;

Url := 'https://www.thedogs.co.nz/catch-the-action/results.aspx';

... := HTTP.Get(Url, ...);
// parse HTML as needed...

Sl.Add('__VIEWSTATE=' + theVS);
Sl.Add('__VIEWSTATEGENERATOR=' + theVSG);
Sl.Add('__EVENTVALIDATION=' + theEV);
Sl.Add( 'txtCurrentDate=1/12/2015 12:00:00 a.m.');
Sl.Add( 'txtAction=prevMonth');

HTTP.Request.Referer := Url;

HTTP.Post( Url, SL, M );

M.Position := 0;
SL.LoadFromStream(M);
SL.SaveToFile( '.\downloaded\theresults' );
// or simply: M.SaveToFile( '.\downloaded\theresults' );

答案 1 :(得分:0)

一个大"谢谢"给大家的帮助。问题原来是一个Windows'。几年前我的硬盘驱动器失败了,在更换它的过程中我升级到Win 7.大约一年后,我决定升级到Windows 8. HATED IT !! Asap,升级到8.1,最后几个月前,10。

想知道以上是否对我的Delphi问题有任何影响我想我会看看驱动器C上的实际内容: - 我注意到一个名为~windows或windows.old之类的文件夹。里面是一个完整的Windows文件集,但在其中也是另一个完整的WINDOWS文件夹。 长话短说 - 启动到DOS提示符并使用命令' del 删除文件夹中的所有文件。 / S / F / Q'然后删除了所有的文件夹,我现在非常高兴地报告说,最后我有一个非常好的Delphi + Indy10!