【发布时间】:2013-09-01 17:05:46
【问题描述】:
主要任务是通过 Delphi 程序进行 POST 授权。使用 REST 客户端,我发现有站点的 url 和两个标题:*login_email* 和 *login_pass* 我可以成功获取 HTML codу 并且我的 POST auth 表单没问题,我已经登录了。
但是,我编写了这个 Delphi 代码:
DataToSend := TStringList.Create;
DataToSend.Add('');
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
IdHTTP1.Request.CustomHeaders.AddValue('login_email','some_email');
IdHTTP1.Request.CustomHeaders.AddValue('login_pass','some_password');
Memo1.Lines.Add(idHTTP1.Post('http://url.com', DataToSend));
我的自定义标头不是 URL 编码的。
我看到了请求标头:
Server: nginx/1.0.8
Date: Sun, 01 Sep 2013 17:03:59 GMT
Content-Type: text/html; charset=windows-1251
Connection: close
X-Powered-By: PHP/5.2.6-1+lenny16
Vary: Accept-Encoding
但保留的 HTML 是同一个页面,其 POST 请求已以未处理的形式发送。
我做错了什么?
【问题讨论】:
-
由于 Indy 设置的默认
User-Agent,一些服务器拒绝了请求。如果这是您的情况,您可以尝试使用最喜欢的浏览器之一填充IdHTTP1.Request.UserAgent属性,以伪造您是浏览器的服务器。但这只是我的猜测(而且是一个相当常见的问题)。 -
我已将此 Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36 添加为 UserAgent,但没有任何改变。