PDA

View Full Version : سوال: مشکل استفاده از کمپوننت IdHTTP برای ارسال مقادیر به URL



mobtakeran.sanat
سه شنبه 11 خرداد 1395, 16:54 عصر
با سلام
من برای ارسال پیامک در برنامه می خواستم از سرویس URL سرویس های پیامکی استفاده کنم. برای همین از کمپوننت IdHTTP استفاده می کنم.
ولی زمان post مقادیر خطا میده. در صورتی که مقدار پراپرتی HandleRedirecs رو TRUE میکنم خطای " Internal Server Error " میده و اگه اون رو False کنم
خطای "HTTP 1.1 302 Found" رو میده
البته بقیه پارامترهای IdHTTP بصورت زیر تنظیم شده :
lParamList := TStringList.Create ;


lParamList.Add(edUrlUserName.Text + '=' + edtUserName.Text) ;
lParamList.Add(edUrlPass.Text + '=' + edtPassword.Text) ;
If Trim(edUrlDomain.Text) <> '' Then
lParamList.Add(edUrlDomain.Text + '=' + edtDomain.Text) ;
lParamList.Add(edUrlMsg.Text + '=' + UTF8Encode(AText)) ;
lParamList.Add(edUrlReciverNum.Text + '=' + ANumber) ;
lParamList.Add(edUrlSenderNum.Text + '=' + smsNumber) ;


Try
IdHTTP1.AllowCookies := True ;
IdHTTP1.Request.Accept := 'text/html, */*' ;
IdHTTP1.Request.ContentEncoding := '' ;
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded' ;


Rst := IdHTTP1.Post(edUrlAddress.Text, lParamList) ;

میخواستم ببینک کسی از این کمپوننت استفاده کرده ؟؟؟
ممنون

Mahmood_M
سه شنبه 11 خرداد 1395, 17:32 عصر
HandleRedirects باید True باشه، چون معمولا در اینگونه سرویسها درخواست Redirect میشه به یک URL دیگه
در مورد پیغام Internal Server Error ، این پیغام دلایل مختلفی می تونه داشته باشه
با استفاده از Try ... Except به صورت زیر اطلاعات بیشتری از خطا رو مشاهده کنید تا بتونید به جواب بهتری برسید :


var
ECode : Integer;
EMsg, EInfo : String;
begin
...
try
IdHTTP1.Post();
except
on E: EIdHTTPProtocolException do
begin
ECode := E.ErrorCode;
EMsg := E.Message;
EInfo := E.ErrorMessage;
end;
end;
end;


اما برای استفاده از سرویس پیامک چرا از SOAP استفاده نمی کنید ؟
شرکت سرویس دهنده وب سرویس SOAP ارایه نمی کنه ؟

mobtakeran.sanat
سه شنبه 11 خرداد 1395, 18:50 عصر
یکی از امکانات نرم افزار ارسال از طریق وب سرویس هستش، ولی از اونجا که تعداد این وب سرویس ها برای هر سرویس پیامکی کم نیست و هر کدوم ساختار خودشون رو دارند
پیاده سازی اونها تو برنامه بسیار زمانبر خواهد بود. ولی با در نظر گرفتن تنظیمات URL هر کدوم از این سرویس های پیامکی می توان به راحتی از این سرویس استفاده کرد.
هر چند مشکل حل شد.
مشکل و ایجاد خطاهای ذکر شده به دلیل عدم استفاده از متد URLEncode بود البته با استفاده از متد GET
به این صورت
Rst := IdHTTP1.Get(URLEncode(edUrlAddress.Text + '?' + ParamStr



با تشکر

reza_66
شنبه 12 فروردین 1396, 17:35 عصر
HandleRedirects باید True باشه، چون معمولا در اینگونه سرویسها درخواست Redirect میشه به یک URL دیگه
در مورد پیغام Internal Server Error ، این پیغام دلایل مختلفی می تونه داشته باشه
با استفاده از Try ... Except به صورت زیر اطلاعات بیشتری از خطا رو مشاهده کنید تا بتونید به جواب بهتری برسید :


var
ECode : Integer;
EMsg, EInfo : String;
begin
...
try
IdHTTP1.Post();
except
on E: EIdHTTPProtocolException do
begin
ECode := E.ErrorCode;
EMsg := E.Message;
EInfo := E.ErrorMessage;
end;
end;
end;


اما برای استفاده از سرویس پیامک چرا از SOAP استفاده نمی کنید ؟
شرکت سرویس دهنده وب سرویس SOAP ارایه نمی کنه ؟

سلام

میشه نحوه استفاده از soap رو توضیح بدین؟؟
ممنون

reza_66
شنبه 12 فروردین 1396, 17:36 عصر
یکی از امکانات نرم افزار ارسال از طریق وب سرویس هستش، ولی از اونجا که تعداد این وب سرویس ها برای هر سرویس پیامکی کم نیست و هر کدوم ساختار خودشون رو دارند
پیاده سازی اونها تو برنامه بسیار زمانبر خواهد بود. ولی با در نظر گرفتن تنظیمات URL هر کدوم از این سرویس های پیامکی می توان به راحتی از این سرویس استفاده کرد.
هر چند مشکل حل شد.
مشکل و ایجاد خطاهای ذکر شده به دلیل عدم استفاده از متد URLEncode بود البته با استفاده از متد GET
به این صورت
Rst := IdHTTP1.Get(URLEncode(edUrlAddress.Text + '?' + ParamStr



با تشکر

سلام
میشه خواهش کنم نحوه استفاده این کامپوننت رو که استفاده کردین توضیح بدین؟؟

آیا از نحوه ارسال و استفاده کامپوننت راضی هستین؟

reza_66
یک شنبه 16 مهر 1396, 13:45 عصر
با سلام
من برای ارسال پیامک در برنامه می خواستم از سرویس URL سرویس های پیامکی استفاده کنم. برای همین از کمپوننت IdHTTP استفاده می کنم.
ولی زمان post مقادیر خطا میده. در صورتی که مقدار پراپرتی HandleRedirecs رو TRUE میکنم خطای " Internal Server Error " میده و اگه اون رو False کنم
خطای "HTTP 1.1 302 Found" رو میده
البته بقیه پارامترهای IdHTTP بصورت زیر تنظیم شده :
lParamList := TStringList.Create ;


lParamList.Add(edUrlUserName.Text + '=' + edtUserName.Text) ;
lParamList.Add(edUrlPass.Text + '=' + edtPassword.Text) ;
If Trim(edUrlDomain.Text) <> '' Then
lParamList.Add(edUrlDomain.Text + '=' + edtDomain.Text) ;
lParamList.Add(edUrlMsg.Text + '=' + UTF8Encode(AText)) ;
lParamList.Add(edUrlReciverNum.Text + '=' + ANumber) ;
lParamList.Add(edUrlSenderNum.Text + '=' + smsNumber) ;


Try
IdHTTP1.AllowCookies := True ;
IdHTTP1.Request.Accept := 'text/html, */*' ;
IdHTTP1.Request.ContentEncoding := '' ;
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded' ;


Rst := IdHTTP1.Post(edUrlAddress.Text, lParamList) ;

میخواستم ببینک کسی از این کمپوننت استفاده کرده ؟؟؟
ممنون


سلام دوست عزیز

امکانش هست کامپوننت idhttp رو برای منم ارسال کنید . ممنون میشم . خیلی دنبال گشتم پیداش نکردم.

reza_jahanii@yahoo.com

Mask
یک شنبه 16 مهر 1396, 16:00 عصر
کامپوننت idhttp از کامپوننتهای پیشفرض خود دلفی هست و نیاز به نصب جدا نداره.