Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi indy 9在发布到https.aspx页面时返回404错误_Delphi_Https_Indy - Fatal编程技术网

Delphi indy 9在发布到https.aspx页面时返回404错误

Delphi indy 9在发布到https.aspx页面时返回404错误,delphi,https,indy,Delphi,Https,Indy,我正在使用Indy 9TIdHTTP组件和TidsLioHandlerSocket发布到aspx页面()以模拟浏览器中发生的情况,以查看特定的比赛结果。 以下代码应下载2015年11月的结果 首先,我获取URL,然后解析它以提取\uuu VIEWSTATE(theVS)、\uu VIEWSTATEGENERATOR(theVSG)和\uu EVENTVALIDATION(theEV)的值 然后我会这样做: with HTTP do begin AllowCookies := True;

我正在使用Indy 9
TIdHTTP
组件和
TidsLioHandlerSocket
发布到aspx页面()以模拟浏览器中发生的情况,以查看特定的比赛结果。 以下代码应下载2015年11月的结果

首先,我获取URL,然后解析它以提取
\uuu VIEWSTATE
(theVS)、
\uu VIEWSTATEGENERATOR
(theVSG)和
\uu EVENTVALIDATION
(theEV)的值

然后我会这样做:

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;
Sl是一个
TStringList
,M是一个
TMemoryStream

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

Url := 'https://www.thedogs.co.nz/catch-the-action/results.aspx';
HTTP.Post( Url, SL, M );
showmessage( 'sent' );
AssignFile( F, '.\downloaded\theresults' );
Rewrite( F );
M.Position := 0;
SL.LoadFromStream(M);

for X := 0 to SL.Count - 1 do
  WriteLn( F, SL[ X ] );

CloseFile( F );
然而,我得到的只是一个例外

未找到HTTP/1.1 404


非常感谢您的帮助

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

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

在您
Get()之后
用于检索Cookie和ViewState数据的页面,在后续请求中,您没有将
请求。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' );
非常感谢大家的帮助。问题原来是Windows的问题。几年前,我的硬盘出现故障,在更换过程中,我升级到Win 7。大约一年后,我决定升级到Windows 8。我讨厌它!!尽快,升级到8.1,最后在几个月前,升级到10

想知道上面的问题是否与我的Delphi问题有关,我想看看驱动器C上的实际情况:-我注意到一个名为~windows或windows.old之类的文件夹。里面有一个完整的windows文件集,但里面还有另一个完整的windows文件夹。
长话短说-启动到DOS提示符,使用命令“del./S/F/Q”删除文件夹中的所有文件,然后删除所有文件夹,我现在非常高兴地报告,我终于有了一个Delphi+Indy10,它工作得非常好!

谢谢你的时间Remy。我已经做了建议的更改,但仍然得到了一个HTTP/1.1 404而不是Found error.@ChazF:您使用的是代理服务器吗?@ChazF:我展示的代码在最新版本的Indy 10中对我来说效果很好。我从服务器上得到了
200 OK
回复,预计2015年11月的HTML。Indy 9已经过时了,可能您遇到了一个早已修复的错误。@Remy-非常感谢您坚持不懈的努力。。。。我将下载并安装Indy 10。致以最良好的祝愿。安装Indy 10的运气不太好……我甚至从硬盘中删除了所有与Indy相关的内容,并从Delphi中删除了Indy 9软件包,从头开始,但我无法安装软件包dclIndyProtocols50.bpl-itt只是出现了一个入口点错误或者,我听说有其他人做到了,那么我做错了什么?