Delphi 如何发布数据以获得正确的结果?

Delphi 如何发布数据以获得正确的结果?,delphi,post,delphi-xe2,tampering,Delphi,Post,Delphi Xe2,Tampering,我想写一些帖子 Uses IdBaseComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdComponent, StrUtils, IdSSLOpenSSL; function PostData(const AURL: string; AParamList: TStringList): string; var _idHTTP: TIdHTTP; _ResultStream: TStringStream; _IdSSLIOHa

我想写一些帖子

Uses
  IdBaseComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdComponent, StrUtils,
  IdSSLOpenSSL;

function PostData(const AURL: string; AParamList: TStringList): string;
var
  _idHTTP: TIdHTTP;
  _ResultStream: TStringStream;
  _IdSSLIOHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  _ResultStream := TStringStream.Create('', TEncoding.UTF8);
  _idHTTP := TIdHTTP.Create(nil);
  _IdSSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  try
    _idHTTP.IOHandler := _IdSSLIOHandler;
    _idHTTP.Post(AURL, AParamList, _ResultStream);
    Result := _ResultStream.DataString;
  finally
    FreeAndNil(_ResultStream);
    FreeAndNil(_idHTTP);
    FreeAndNil(_IdSSLIOHandler);
  end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  _ParamList: TStringList;
  _Reply: string;
begin
  _ParamList := TStringList.Create;
  try
    _ParamList.Add('id=276683492511635');
    _ParamList.Add('pin=4580');
    _Reply := PostData('https://eturundus.eu/samsung-pin-lt/_ajax/pin',
      _ParamList);
    ShowMessage(_Reply);
  finally
    FreeAndNil(_ParamList);
  end;
end;
我应该得到
{“状态”:“丢失”、“尝试”:2}
{“状态”:“结束”}
等,但我得到的只是消息框中的一个空字符串。我错过了什么

编辑: 我补充说

_idHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0';
_idHTTP.Request.ContentType := 'application/json, text/javascript, */*; q=0.01';
但仍然得到空字符串

篡改数据还为我提供了以下信息:

<?xml version="1.0"?>
   <!-- Export of tamperdata transacions -->
  <tdRequests>
    <tdRequest uri="https%3A//eturundus.eu/samsung-pin-lt/_ajax/pin%3Fid%3D638369916257545%26pin%3D4580">
      <tdStartTime>20:02:42.238</tdStartTime>
      <tdStartTimeMS>1399827762238</tdStartTimeMS>
      <tdElapsedTime>177</tdElapsedTime>
      <tdTotalElapsedTime>177</tdTotalElapsedTime>
      <tdStatus>200</tdStatus>
      <tdStatusText>OK</tdStatusText><tdRequestMethod>GET</tdRequestMethod>
      <tdContentSize>-1</tdContentSize>
      <tdMimeType>text/html</tdMimeType>
    <tdRequestHeaders>
      <tdRequestHeader name="Host">eturundus.eu</tdRequestHeader>
      <tdRequestHeader name="User-Agent">Mozilla/5.0%20%28Windows%20NT%206.1%3B%20WOW64%3B%20rv%3A29.0%29%20Gecko/20100101%20Firefox/29.0</tdRequestHeader>
      <tdRequestHeader name="Accept">application/json%2C%20text/javascript%2C%20*/*%3B%20q%3D0.01</tdRequestHeader>
      <tdRequestHeader name="Accept-Language">en-US%2Cen%3Bq%3D0.5</tdRequestHeader>
      <tdRequestHeader name="Accept-Encoding">gzip%2C%20deflate</tdRequestHeader>
    <tdRequestHeader name="X-Requested-With">
    XMLHttpRequest</tdRequestHeader>
    <tdRequestHeader name="Referer">
    https%3A//eturundus.eu/samsung-pin-lt/</tdRequestHeader>
    <tdRequestHeader name="Cookie">
    fbsr_265895733592477%3DMVuDCQySiQZErCLlQhy2Z-NISg3-pNSug5Hkw7Kxr58.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiJBUUNTWHUwdTFOQVRkTjRmSDZjUnktV0d3OFdSdUwyc3N1a0tkNEhlSjdVSUVaWlp0cWhNaWQ2TmtXX3J6ZFVRckdTXzZEZElnNW5oNW9GWkViWEl2cVVad2RNbVdLRGdVbGNpV1FsZnBwYlM2bnBLWENVZHNmcG1LNXM1ZlJ4REFSdWs2SXZMcUlVVEd0cUlVM0FoN2tid01DYnpoTWZsdnlPUUJmX0lTeGpENWRIaUpMbDM2VE0tNU85cHNRbGRxak1fSWlhdHMxTDRkZndDbWYwTkxFaFRoSTdnUk5mV3pRMlBwbWUzVWEtQXBVVHZRTXRQX0luTlpNR283M2duRWlpVDkzaVU3a2NDQTdTSFM5OXZ6WEVSLVBKQVkzek1PNUZBZ1NQZ09pZmZpckdmbTd5Z1BaVVNzblBrQ2pla19hQlYyRzRGQlZpa2ctaVp0QWJyazFwaCIsImlzc3VlZF9hdCI6MTM5OTgyNzcwNCwidXNlcl9pZCI6IjYzODM2OTkxNjI1NzU0NSJ9%3B%20PHPSESSID%3D58416520248001a68a259f52b7cf82dd</tdRequestHeader>
    <tdRequestHeader name="Connection">
    keep-alive</tdRequestHeader>
    </tdRequestHeaders><tdPostHeaders></tdPostHeaders>
    <tdPostElements>
    </tdPostElements>
    <tdResponseHeaders><tdResponseHeader name="Date">
    Sun%2C%2011%20May%202014%2017%3A02%3A17%20GMT
    </tdResponseHeader>
    <tdResponseHeader name="Server">
    Apache%20/%20DataZone
    </tdResponseHeader>
    <tdResponseHeader name="Expires">
    Thu%2C%2019%20Nov%201981%2008%3A52%3A00%20GMT
    </tdResponseHeader>
    <tdResponseHeader name="Cache-Control">
    no-store%2C%20no-cache%2C%20must-revalidate%2C%20post-check%3D0%2C%20pre-check%3D0
    </tdResponseHeader>
    <tdResponseHeader name="Pragma">
    no-cache
    </tdResponseHeader>
    <tdResponseHeader name="Keep-Alive">
    timeout%3D5%2C%20max%3D100
    </tdResponseHeader>
    <tdResponseHeader name="Connection">
    Keep-Alive
    </tdResponseHeader>
    <tdResponseHeader name="Transfer-Encoding">
    chunked
    </tdResponseHeader>
    <tdResponseHeader name="Content-Type">
    text/html
    </tdResponseHeader>
    </tdResponseHeaders>
</tdRequest>
</tdRequests>

20:02:42.238
1399827762238
177
177
200
奥吉特
-1
文本/html
eturundus.eu
Mozilla/5.0%20%28Windows%20NT%206.1%3B%20WOW64%3B%20rv%3A29.0%29%20Gecko/20100101%20Firefox/29.0
应用程序/json%2C%20text/javascript%2C%20*/*%3B%20q%3D0.01
欧洲-美国%2欧洲%3Bq%3D0.5
gzip%2C%20deflate
XMLHttpRequest
https%3A//eturundus.eu/samsung-pin-lt/
FBSR265895733592477%3DMVudcqysiqzerclqhy2Z-NISg3-pNSug5Hkw7Kxr58.EYJHBGDCml0Ag0IijitufLvNIQTi1NISIMNVzGuijbuuntWdtFoqvRjRzJrZJrZJrJrJrJrJrJrJrJrJrJrJrJrV0DvSuvawL0CwW0CwKvCwKwKvTzZZZZZZZZWzLnW5W9KwKvTwKwKvTwKvTzLnW9kW9KwKvTwKwKwKwKvTzZZZZZZZZZZZZZZZZZZZZZZZZZZZZZL5WZZZZZZZZZZZZZZ2)一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的中国的一个中国的一个中国的中国的一个中国的一个ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZDD
活命
太阳%2C%2011%20May%202014%2017%3A02%3A17%20GMT
Apache%20/%20数据区
周四%2C%2019%2011%201981%2008%3A52%3A00%20GMT
没有存储%2C%20没有缓存%2C%20必须重新验证%2C%20后检查%3D0%2C%20预检查%3D0
无缓存
超时%3D5%2C%20max%3D100
活命
大块
文本/html

根本不要使用
TStringStream
。您正在使用它强制UTF-8解码,但如果应答数据不是UTF-8编码的,则读取
DataString
可能无法解码数据并返回空白字符串

使用返回
字符串的
TIdHTTP.Post()
版本,让Indy根据回复的实际字符集为您解码数据:

function PostData(const AURL: string; AParamList: TStrings): string;
var
  _idHTTP: TIdHTTP;
begin
  _idHTTP := TIdHTTP.Create(nil);
  try
    _idHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(_idHTTP);
    Result := _idHTTP.Post(AURL, AParamList);
  finally
    FreeAndNil(_idHTTP);
  end;
end;
更新:您提供的屏幕截图显示GET请求,而不是POST请求:

function GetData(const AURL: string): string;
var
  _idHTTP: TIdHTTP;
begin
  _idHTTP := TIdHTTP.Create(nil);
  try
    _idHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(_idHTTP);
    Result := _idHTTP.Get(AURL);
  finally
    FreeAndNil(_idHTTP);
  end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  _Reply: string;
begin
  _Reply := GetData('https://eturundus.eu/samsung-pin-lt/_ajax/pin?id=276683492511635&pin=4580');
  ShowMessage(_Reply);
end;

根本不要使用
TStringStream
。您正在使用它强制UTF-8解码,但如果应答数据不是UTF-8编码的,则读取
DataString
可能无法解码数据并返回空白字符串

使用返回
字符串的
TIdHTTP.Post()
版本,让Indy根据回复的实际字符集为您解码数据:

function PostData(const AURL: string; AParamList: TStrings): string;
var
  _idHTTP: TIdHTTP;
begin
  _idHTTP := TIdHTTP.Create(nil);
  try
    _idHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(_idHTTP);
    Result := _idHTTP.Post(AURL, AParamList);
  finally
    FreeAndNil(_idHTTP);
  end;
end;
更新:您提供的屏幕截图显示GET请求,而不是POST请求:

function GetData(const AURL: string): string;
var
  _idHTTP: TIdHTTP;
begin
  _idHTTP := TIdHTTP.Create(nil);
  try
    _idHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(_idHTTP);
    Result := _idHTTP.Get(AURL);
  finally
    FreeAndNil(_idHTTP);
  end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  _Reply: string;
begin
  _Reply := GetData('https://eturundus.eu/samsung-pin-lt/_ajax/pin?id=276683492511635&pin=4580');
  ShowMessage(_Reply);
end;

根本不要使用
TStringStream
。您正在使用它强制UTF-8解码,但如果应答数据不是UTF-8编码的,则读取
DataString
可能无法解码数据并返回空白字符串

使用返回
字符串的
TIdHTTP.Post()
版本,让Indy根据回复的实际字符集为您解码数据:

function PostData(const AURL: string; AParamList: TStrings): string;
var
  _idHTTP: TIdHTTP;
begin
  _idHTTP := TIdHTTP.Create(nil);
  try
    _idHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(_idHTTP);
    Result := _idHTTP.Post(AURL, AParamList);
  finally
    FreeAndNil(_idHTTP);
  end;
end;
更新:您提供的屏幕截图显示GET请求,而不是POST请求:

function GetData(const AURL: string): string;
var
  _idHTTP: TIdHTTP;
begin
  _idHTTP := TIdHTTP.Create(nil);
  try
    _idHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(_idHTTP);
    Result := _idHTTP.Get(AURL);
  finally
    FreeAndNil(_idHTTP);
  end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  _Reply: string;
begin
  _Reply := GetData('https://eturundus.eu/samsung-pin-lt/_ajax/pin?id=276683492511635&pin=4580');
  ShowMessage(_Reply);
end;

根本不要使用
TStringStream
。您正在使用它强制UTF-8解码,但如果应答数据不是UTF-8编码的,则读取
DataString
可能无法解码数据并返回空白字符串

使用返回
字符串的
TIdHTTP.Post()
版本,让Indy根据回复的实际字符集为您解码数据:

function PostData(const AURL: string; AParamList: TStrings): string;
var
  _idHTTP: TIdHTTP;
begin
  _idHTTP := TIdHTTP.Create(nil);
  try
    _idHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(_idHTTP);
    Result := _idHTTP.Post(AURL, AParamList);
  finally
    FreeAndNil(_idHTTP);
  end;
end;
更新:您提供的屏幕截图显示GET请求,而不是POST请求:

function GetData(const AURL: string): string;
var
  _idHTTP: TIdHTTP;
begin
  _idHTTP := TIdHTTP.Create(nil);
  try
    _idHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(_idHTTP);
    Result := _idHTTP.Get(AURL);
  finally
    FreeAndNil(_idHTTP);
  end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  _Reply: string;
begin
  _Reply := GetData('https://eturundus.eu/samsung-pin-lt/_ajax/pin?id=276683492511635&pin=4580');
  ShowMessage(_Reply);
end;


这也不能给我任何东西。GetData仍然给我一个空字符串。即使我设置了UserAgent。您的篡改跟踪显示代码未设置的
X-request-With
Referer
、和
Cookie
头。最后两个特别建议您必须先请求另一个URL以获取cookie,然后请求目标URL。我知道这一定是我们在原始问题中看不到的内容(在屏幕截图和XML示例之前)。@Remy,确实,缺少标题是问题所在。非常感谢。谢谢大家。这也帮不了我什么。GetData仍然会给我一个空字符串。即使我设置了UserAgent。您的篡改跟踪显示代码未设置的
X-request-With
Referer
、和
Cookie
头。最后两个特别建议您必须先请求另一个URL以获取cookie,然后请求目标URL。我知道这一定是我们在原始问题中看不到的内容(在屏幕截图和XML示例之前)。@Remy,确实,缺少标题是问题所在。非常感谢。谢谢大家。这也帮不了我什么。GetData仍然会给我一个空字符串。即使我设置了UserAgent。您的篡改跟踪显示代码未设置的
X-request-With
Referer
、和
Cookie
头。最后两个特别建议您必须先请求另一个URL以获取cookie,然后请求目标URL。我知道这一定是我们在原始问题中看不到的内容(在屏幕截图和XML示例之前)。@Remy,确实,缺少标题是问题所在。非常感谢。谢谢大家。这也帮不了我什么。GetData仍然会给我一个空字符串。即使我设置了UserAgent。您的篡改跟踪显示代码未设置的
X-request-With
Referer
、和
Cookie
头。最后两个特别建议您必须先请求另一个URL以获取cookie,然后请求目标URL