我正在编写一个解密JDownloader DLC文件的软件.该程序将使用POST请求将dlc文件发送到" http://dcrypt.it/decrypt/upload ",并将解码链接作为响应.
这是我抛出该错误的代码:
var
Form1: TForm1;
Stream: TStringStream;
Params: TIdMultiPartFormDataStream;
HTTP: TIdHTTP;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
Stream := TStringStream.Create('');
Params := TIdMultiPartFormDataStream.Create;
Params.AddFile('File1', 'D:\3fcaa401f8f3ebe32fb93cb607ecadd01ee954ed.dlc', 'application/octet-stream');
HTTP.Post('http://dcrypt.it/decrypt/upload', Params, Stream);
ShowMessage(Stream.DataString);
end;
Run Code Online (Sandbox Code Playgroud)
当我调试我的程序时,Delphi IDE在IdHTTP.pas中显示这些:
function TIdCustomHTTP.GetRequest: TIdHTTPRequest;
begin
Result := FHTTPProto.Request; //This line is highlighted.
end;
Run Code Online (Sandbox Code Playgroud)
那么,我该怎么做才能解决这个问题呢?
您没有初始化HTTP组件.由于它是一个全局变量,它将自动初始化为nil.
当你打电话时,HTTP.Post('http://dcrypt.it/decrypt/upload', Params, Stream);它不会立即在通话地点断开.您在nil引用上调用它,因此只要它访问某个内部字段或尝试调用虚方法就会导致AV.
您必须在使用之前构造HTTP组件:
HTTP := TIdHTTP.Create(nil);
try
...
finally
HTTP.Free;
end;
Run Code Online (Sandbox Code Playgroud)
此外,良好的做法是你应该避免使用全局变量.您可以而且应该将所有必要的变量声明为本地变量.并确保在完成后释放所有内容.
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |