#delphi #post #delphi-2010 #idhttp
#delphi #Публикация #delphi-2010 #idhttp
Вопрос:
я хочу опубликовать данные по следующему URL:
http://mehratin.heroku.com/personals/new
я пишу следующий код, но возникает проблема:
procedure TForm1.Button3Click(Sender: TObject);
var
aStream: TMemoryStream;
Params: TStringList;
begin
aStream := TMemoryStream.Create;
Params := TStringList.Create;
try
with IdHTTP1 do
begin
Params.Add('fname=123');
Params.Add('lname=123');
Request.ContentType := 'application/x-www-form-urlencoded';
try
Response.KeepAlive := False;
Post('http://localhost:3000/personals/new', Params);
except
on E: Exception do
showmessage('Error encountered during POST: ' E.Message);
end;
end;
как я могу опубликовать данные методом TIDHtttp.post в delphi 2010?
Комментарии:
1. Вы могли бы попробовать удалить запрос. Тип содержимого. Также — убедитесь, что порт, к которому вы пытаетесь получить доступ, открыт и не используется другим процессом. Рекомендуется вместо этого попробовать это на вашем хостинге. 😉
2. Версия Post() для TStrings кодирует входные данные в соответствии с типом содержимого ‘application/x-www-form-urlencoded’ по умолчанию (Indy 10.5.8).
3. Как проявляется ошибка, есть ли код ошибки HTTP или неверные данные на стороне сервера? Ожидает ли сервер, что application/x-www-form-urlencoded будет закодирован (или что-то еще вроде multipart / form-data)?
Ответ №1:
Перво-наперво, вам нужно было бы прочитать код ответа http (было бы полезно включить это в ваш вопрос).
В отсутствие этого я ранее использовал Indy http-объект, как показано ниже. Однако я включил параметры в свой URL. Для устранения неполадок попробуйте запустить это с http.Убедитесь, что порт открыт, и вы действительно можете подключиться к серверу. Вот мой пример для завершения:
// parameters
params := format('export=1amp;format=%samp;file=%s', [_exportType, destination]);
// First setup the http object
procedure TCrystalReportFrame.SetupHttpObject();
begin
try
IDHTTP1.HandleRedirects := TRUE;
IDHTTP1.AllowCookies := true;
IDHTTP1.Request.CacheControl := 'no-cache';
IdHTTP1.ReadTimeout := 60000;
_basePath:= GetBaseUrl;
except
on E: Exception do
begin
Global.LogError(E, 'SetupHttpObject');
end;
end;
end;
// Then have an onwork event
procedure TCrystalReportFrame.HttpWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
var
Http: TIdHTTP;
ContentLength: Int64;
Percent: Integer;
begin
Http := TIdHTTP(ASender);
ContentLength := Http.Response.ContentLength;
end;
// The actual process
procedure TCrystalReportFrame.ProcessHttpRequest(const parameters: string);
var
url : string;
begin
try
try
SetupHttpObject;
IdHTTP1.OnWork:= HttpWork;
url := format('%samp;%s', [_basePath, parameters]);
url := IdHTTP1.Post(url);
except
on E: Exception do
begin
Global.LogError(E, 'ProcessHttpRequest');
end;
end;
finally
try
IdHTTP1.Disconnect;
except
begin
end;
end;
end;
end;