PDA

View Full Version : سوال: ساخت Feedback برا پروژه



md3848
چهارشنبه 01 اردیبهشت 1400, 05:34 صبح
سلام، برا ساخت Feedback برا پروژه مث چیزی که Google Chrome داره، از چه روشی باید استفاده کرد؟ این مورد همون ارسال ایمیله؟ یا فرق داره؟ کلا روش اصولی اینکار چیه؟ یا اینطور بپرسم، بهترین روش اینکار چیه؟
اگه همون داستان ارسال ایمیله، کدهایی تو نت من دیدم هم داستان داره؛ برا قسمت ایمیل دریافت کننده، ایمیل خودمو میدم، اما برا قسمت ایمیل ارسال کننده کاربر باید ایمیل خودشو وارد کنه، USER - PASS هم باید وارد کنه که خب من جای کاربر باشم تو خواب هم اینکارو نمیکنم! حالا فرض میکنیم که من برنامه نویس یه ایمیل برای نرم افزارم ایجاد میکنم ( و در تنظیمات ایمیل ام هم، گزینه "دسترسی به برنامه‌ با امنیت کمتر" رو هم فعال میکنم تا نرم افزار ام، به ایمیلم دسترسی داشته باشه )، اینطوری دیگه کاربر نیازی نداره که چیزی وارد کنه ( EMAIL - USER - PASS ) ولی آیا روش صحیح بحث Feedback یا همون ارسال پیام ( همراه با عکس یا اسناد دیگه ) به برنامه نویس همینه؟ خو اینطوری هک کردن ایمیل که کاری نداره که، پسورد هم که تو کدهای پروژه هستش، حتما میگید که هش اش کنم :قهقهه::لبخند::گریه:

153248

protected void SendMail(){
//create mail message
string from = "IslamicApplication1@gmail.com";
string to = "mahdedamarchi@gmail.com";
string subject = "Subject";
string body = "<h1>Body</h1>";
MailMessage mail = new MailMessage(from, to, subject, body)
{
IsBodyHtml = true,
BodyEncoding = UTF8Encoding.UTF8,
DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure,
};


//send the message
string user = from;
string pass = " :) ";
SmtpClient smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(user, pass),
EnableSsl = true,
Timeout = 10000,
DeliveryMethod = SmtpDeliveryMethod.Network,
};
smtp.SendCompleted += Smtp_SendCompleted;


try
{
smtp.SendAsync(mail, mail);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}


private void Smtp_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
// Get the message we sent
MailMessage msg = (MailMessage)e.UserState;


if (e.Cancelled)
{
Debug.WriteLine("Cancelled");
}
if (e.Error != null)
{
Debug.WriteLine("Error");
}
else
{
Debug.WriteLine("Success");
}


// finally dispose of the message
if (msg != null)
msg.Dispose();
}

رامین مرادی
چهارشنبه 01 اردیبهشت 1400, 09:12 صبح
سلام وقت بخیر.
یکی از روشها اینه که یه وب سرویسی روی یه هاست ایجاد کنید و فیدبک کاربر رو از طریق اون توی دیتابیس خودتون تو هاست ذخیره کنید(یه هاست ارزون لینوکسی هم کارتون رو را میندازه). یا از طریق همین ایمیل که فرمودید البته خودم به شخصه توصیه نمیکنم

barnamenevisjavan
چهارشنبه 01 اردیبهشت 1400, 14:52 عصر
سلام، برا ساخت Feedback برا پروژه مث چیزی که Google Chrome داره، از چه روشی باید استفاده کرد؟ این مورد همون ارسال ایمیله؟ یا فرق داره؟ کلا روش اصولی اینکار چیه؟ یا اینطور بپرسم، بهترین روش اینکار چیه؟
اگه همون داستان ارسال ایمیله، کدهایی تو نت من دیدم هم داستان داره؛ برا قسمت ایمیل دریافت کننده، ایمیل خودمو میدم، اما برا قسمت ایمیل ارسال کننده کاربر باید ایمیل خودشو وارد کنه، USER - PASS هم باید وارد کنه که خب من جای کاربر باشم تو خواب هم اینکارو نمیکنم! حالا فرض میکنیم که من برنامه نویس یه ایمیل برای نرم افزارم ایجاد میکنم ( و در تنظیمات ایمیل ام هم، گزینه "دسترسی به برنامه‌ با امنیت کمتر" رو هم فعال میکنم تا نرم افزار ام، به ایمیلم دسترسی داشته باشه )، اینطوری دیگه کاربر نیازی نداره که چیزی وارد کنه ( EMAIL - USER - PASS ) ولی آیا روش صحیح بحث Feedback یا همون ارسال پیام ( همراه با عکس یا اسناد دیگه ) به برنامه نویس همینه؟ خو اینطوری هک کردن ایمیل که کاری نداره که، پسورد هم که تو کدهای پروژه هستش، حتما میگید که هش اش کنم :قهقهه::لبخند::گریه:

153248

protected void SendMail(){
//create mail message
string from = "IslamicApplication1@gmail.com";
string to = "mahdedamarchi@gmail.com";
string subject = "Subject";
string body = "<h1>Body</h1>";
MailMessage mail = new MailMessage(from, to, subject, body)
{
IsBodyHtml = true,
BodyEncoding = UTF8Encoding.UTF8,
DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure,
};


//send the message
string user = from;
string pass = " :) ";
SmtpClient smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(user, pass),
EnableSsl = true,
Timeout = 10000,
DeliveryMethod = SmtpDeliveryMethod.Network,
};
smtp.SendCompleted += Smtp_SendCompleted;


try
{
smtp.SendAsync(mail, mail);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}


private void Smtp_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
// Get the message we sent
MailMessage msg = (MailMessage)e.UserState;


if (e.Cancelled)
{
Debug.WriteLine("Cancelled");
}
if (e.Error != null)
{
Debug.WriteLine("Error");
}
else
{
Debug.WriteLine("Success");
}


// finally dispose of the message
if (msg != null)
msg.Dispose();
}
سلام برای ارسال و دریافت فیدبک باید از API استفاده کنید.

md3848
پنج شنبه 02 اردیبهشت 1400, 05:38 صبح
یکی از روشها اینه که یه وب سرویسی روی یه هاست ایجاد کنید و فیدبک کاربر رو از طریق اون توی دیتابیس خودتون تو هاست ذخیره کنید(یه هاست ارزون لینوکسی هم کارتون رو را میندازه). یا از طریق همین ایمیل که فرمودید البته خودم به شخصه توصیه نمیکنم
یعنی میگید همین کد بالا، بجایی این که از گوگل استفاده کنم، از ایمیل هاستم استفاده کنم؟
الان یه ایمیل تو هاستم ساختم و با PORT = 587 ایمیل ارسال کردم و ارسال شد ( که خب این پورت SSL نی، پورت SSL برابر 465 هستش که هرکاری کردم نتونستم باهاش ایمیل ارسال کنم )؛ حالا از ایمیل هاست خودم استفاده کنم یا از ایمیل GMAIL، چه فرقی داره؟


سلام برای ارسال و دریافت فیدبک باید از API استفاده کنید.
API رو دقیقا متوجه نشدم.

رامین مرادی
پنج شنبه 02 اردیبهشت 1400, 08:21 صبح
یعنی میگید همین کد بالا، بجایی این که از گوگل استفاده کنم، از ایمیل هاستم استفاده کنم؟
الان یه ایمیل تو هاستم ساختم و با PORT = 587 ایمیل ارسال کردم و ارسال شد ( که خب این پورت SSL نی، پورت SSL برابر 465 هستش که هرکاری کردم نتونستم باهاش ایمیل ارسال کنم )؛ حالا از ایمیل هاست خودم استفاده کنم یا از ایمیل GMAIL، چه فرقی داره؟


API رو دقیقا متوجه نشدم.
نه ایمیل رو کلا بیخیال بشید هم به خاطر مسائل امنیتش هم اینکه ممکنه به هر دلیلی سرویس دهنده ش مثلا پورتش یا آدرس سرورش تغییر بکنه مخصوصا هاست های شخصی.
شما با استفاده از یک زبان تحت وب مثل php میاید و وب سرویس کوچیکی رو طرای میکنید و اطلاعات رو از نرم افزارتون به اون وب سرویس میفرستید. بعد داخل وب سرویستون اون اطلاعات رو در دیتابیس ذخیره میکنید تا بتونید بعدا ازش استفاده کافی رو ببرید.

barnamenevisjavan
پنج شنبه 02 اردیبهشت 1400, 15:37 عصر
یعنی میگید همین کد بالا، بجایی این که از گوگل استفاده کنم، از ایمیل هاستم استفاده کنم؟
الان یه ایمیل تو هاستم ساختم و با PORT = 587 ایمیل ارسال کردم و ارسال شد ( که خب این پورت SSL نی، پورت SSL برابر 465 هستش که هرکاری کردم نتونستم باهاش ایمیل ارسال کنم )؛ حالا از ایمیل هاست خودم استفاده کنم یا از ایمیل GMAIL، چه فرقی داره؟


API رو دقیقا متوجه نشدم.
همون چیزی که اقای رامین مرادی گفتن:
لینک زیر یه API هستش که اگر پارامتر های اون رو کامل کنیم (apikey مثل رمز عبور میمونه، و t اسم یه فیلم باید باشه) وقتی این لینک روش کلیک بشه اون اسم فیلم و رمز عبور به برنامه تحت وب ارسال میشه بعدش نتیجه اون که مشخصات هست در قالب json برمیگرده:

www.omdbapi.com/?t=arrow&apikey=xxxxxx

md3848
پنج شنبه 02 اردیبهشت 1400, 20:25 عصر
پس من برم با PHP یه کدی بزنم که داده رو از برنامم بگیره، و بعد در دیتابیس MYSQL ام ذخیره کنه، یا این که همونجا که داده رو گرفت هاستم، درجا داده رو به ایمیل از قبل تعریف شده، ایمیل کنه - اینو پیگیری میکنم و نتیجه رو همینجا اعلام میکنم.

یه موردی، امکان ارتباط Microsoft SQL Server با دیتابیس هاست هستش؟ یا به عبارتی یه دیتابیسی که تو هاست ( محیط اینترنت، آنلاین ) قرار داره، و از طریق C#‎‎‎ بهش دسترسی داشته باشیم ( اینطوری دیگه فک کنم نیازی به PHP و اینجور چیزا باشه )
توجه : دیتابیسی که رو هاست هستش فک کنم mysql باشه.
کلا امکان مدیریت دیتابیس mysql هاست ( که رو سایت قرار داره ) از طریق C#‎‎‎ هستش؟

----

با پشتیبانی هاستم تماس گرفتم، گفتن هاست شما امکان ریموت کنترل کردن دیتابیس غیرفعال هستش به دلایل امنیتی، برا این مورد باید سرور مجازی بگیری که ماهی 1 تومن هزینشه :گریه: اصلا چه کاریه که دیتابیس هاست رو با سیشارپ کنترل کنیم. :لبخند:

barnamenevisjavan
پنج شنبه 02 اردیبهشت 1400, 23:46 عصر
پس من برم با PHP یه کدی بزنم که داده رو از برنامم بگیره، و بعد در دیتابیس MYSQL ام ذخیره کنه، یا این که همونجا که داده رو گرفت هاستم، درجا داده رو به ایمیل از قبل تعریف شده، ایمیل کنه - اینو پیگیری میکنم و نتیجه رو همینجا اعلام میکنم.

یه موردی، امکان ارتباط Microsoft SQL Server با دیتابیس هاست هستش؟ یا به عبارتی یه دیتابیسی که تو هاست ( محیط اینترنت، آنلاین ) قرار داره، و از طریق C#‎‎‎‎ بهش دسترسی داشته باشیم ( اینطوری دیگه فک کنم نیازی به PHP و اینجور چیزا باشه )
توجه : دیتابیسی که رو هاست هستش فک کنم mysql باشه.
کلا امکان مدیریت دیتابیس mysql هاست ( که رو سایت قرار داره ) از طریق C#‎‎‎‎ هستش؟

----

با پشتیبانی هاستم تماس گرفتم، گفتن هاست شما امکان ریموت کنترل کردن دیتابیس غیرفعال هستش به دلایل امنیتی، برا این مورد باید سرور مجازی بگیری که ماهی 1 تومن هزینشه :گریه: اصلا چه کاریه که دیتابیس هاست رو با سیشارپ کنترل کنیم. :لبخند:
اکثرا قابلیت ریموت روی هاست غیرفعاله، شما یکاری کن یه اکانت تو گیتهاب باز کن یه مخزن برای پروژه ایجاد کن و از قسمت Issue برای دریافت فیدبک استفاده کن، از طریق API سایت گیتهاب میتونی انجام بدی اون کلید API رو هم میتونی هش و رمز نگاری و این چیزا بکنی که از لحاظ امنیت مشکلی پیش نیاد.

md3848
جمعه 03 اردیبهشت 1400, 05:51 صبح
خب اینم از API یی که گفتید، کدشو زدم، :لبخند: همین منظورتون بود یا روش دیگه ای؟ :لبخندساده:

کد سمت C#‎‎‎‎ : تابع ارسال دیتا به صفحه وب، که یه داده با نام API داره ( که همون پسورد هستش، برا این که هر ننه قمری نتونه داده ارسال کنه به صفحه وب من :لبخند: )، و داده هایی با نام : نام/ایمیل/عنوان/پیغام؛ که خب کاربر اگه دوست داشت اسمشو و ایمیلشو وارد میکنه ( دقیقا مثل قسمت نظرات سایت ها و وبلاگ ها )، عنوان پیغامشو وارد کنه و محتوای پیغامشو وارد میکنه.
private string SendDataToWebpage() {
string response = "";

try
{
string url = "https://dmf313.ir/IslamicApp/index.php";
string dataStr = string.Format("API={0}&Name={1}&Email={2}&Title={3}&Message={4}", "Z4s!JF6b3?Ycu4!$", "Mahdi", "1@2.3", "Test Title", "Test Message");
byte[] dataByte = Encoding.UTF8.GetBytes(dataStr);


HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ContentLength = dataByte.Length;


// send data
using (Stream webpageStream = webRequest.GetRequestStream())
{
webpageStream.Write(dataByte, 0, dataByte.Length);
}


// read response
using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
{
using (StreamReader reader = new StreamReader(webResponse.GetResponseStream()))
{
response = reader.ReadToEnd();
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}


Debug.WriteLine("response = " + response);


return response;
}

کد سمت وب ( PHP ) : اگه API یا همون پسورد صحیح بود ( که خب همیشه صحیح هستش چون خودم کدشو نوشتم :لبخند: )، میاد داده های فوق رو به ایمیل از قبل تعریف شده در کد PHP، ارسال میکنه؛ یه متنی هم به عناون پاسخ ارسال میکنه سمت برنامه C#‎‎ تا نرم افزارمون چشم به راه نمونه :لبخند:

<?php$Pass = "Z4s!JF6b3?Ycu4!$"; // API [ Password ]
$Response = "";
$EmailTo = "mahdedamarchi@gmail.com"; // Send email to this address!


// Read Data
$API = $_POST["API"];
$Name = $_POST["Name"];
$EmailFrom = $_POST["Email"];
$Title = $_POST["Title"];
$Message = $_POST["Message"];


// if password correct -> Send Email
if ($API == $Pass)
{
$content = "<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>نام : </span>".$Name."</p>".
"<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>ایمیل : </span>".$EmailFrom."</p>".
"<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>عنوان : </span>".$Title."</p>".
"<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>پیغام : </span>".$Message."</p>";


$headers = "From: wordpress@dmf313.ir" . "\n" . "Content-Type: text/html; charset=UTF-8" . "\r\n";


if (filter_var($EmailTo, FILTER_VALIDATE_EMAIL)) { // this line checks that we have a valid email address
$status = mail($EmailTo, $Title, $content, $headers); // This method sends the mail.


if( $status == true ) {
$Response = "Email Send";
}
else {
$Response = "Error Send Email";
}
}
else {
$Response = "Incorrect Email";
}
}
else
{
$Response = "API is inCorrect";
}


// Send Response
echo $Response;


?>


نتیجه : اینم یه عکس از نمونه ایمیل ارسال شده :
153252



سوال : 1) همین منظورتون بود؟ 2) این کدهای من مشکلی چیزی ندارن؟ مخصوصا از نظر امنیتی! 3) نظری پیشنهادی چیزی بود حتما بگید لطفا.

barnamenevisjavan
جمعه 03 اردیبهشت 1400, 10:52 صبح
خب اینم از API یی که گفتید، کدشو زدم، :لبخند: همین منظورتون بود یا روش دیگه ای؟ :لبخندساده:

کد سمت C#‎‎‎‎‎ : تابع ارسال دیتا به صفحه وب، که یه داده با نام API داره ( که همون پسورد هستش، برا این که هر ننه قمری نتونه داده ارسال کنه به صفحه وب من :لبخند: )، و داده هایی با نام : نام/ایمیل/عنوان/پیغام؛ که خب کاربر اگه دوست داشت اسمشو و ایمیلشو وارد میکنه ( دقیقا مثل قسمت نظرات سایت ها و وبلاگ ها )، عنوان پیغامشو وارد کنه و محتوای پیغامشو وارد میکنه.
private string SendDataToWebpage() {
string response = "";

try
{
string url = "https://dmf313.ir/IslamicApp/index.php";
string dataStr = string.Format("API={0}&Name={1}&Email={2}&Title={3}&Message={4}", "Z4s!JF6b3?Ycu4!$", "Mahdi", "1@2.3", "Test Title", "Test Message");
byte[] dataByte = Encoding.UTF8.GetBytes(dataStr);


HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ContentLength = dataByte.Length;


// send data
using (Stream webpageStream = webRequest.GetRequestStream())
{
webpageStream.Write(dataByte, 0, dataByte.Length);
}


// read response
using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
{
using (StreamReader reader = new StreamReader(webResponse.GetResponseStream()))
{
response = reader.ReadToEnd();
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}


Debug.WriteLine("response = " + response);


return response;
}

کد سمت وب ( PHP ) : اگه API یا همون پسورد صحیح بود ( که خب همیشه صحیح هستش چون خودم کدشو نوشتم :لبخند: )، میاد داده های فوق رو به ایمیل از قبل تعریف شده در کد PHP، ارسال میکنه؛ یه متنی هم به عناون پاسخ ارسال میکنه سمت برنامه C#‎‎‎ تا نرم افزارمون چشم به راه نمونه :لبخند:

<?php$Pass = "Z4s!JF6b3?Ycu4!$"; // API [ Password ]
$Response = "";
$EmailTo = "mahdedamarchi@gmail.com"; // Send email to this address!


// Read Data
$API = $_POST["API"];
$Name = $_POST["Name"];
$EmailFrom = $_POST["Email"];
$Title = $_POST["Title"];
$Message = $_POST["Message"];


// if password correct -> Send Email
if ($API == $Pass)
{
$content = "<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>نام : </span>".$Name."</p>".
"<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>ایمیل : </span>".$EmailFrom."</p>".
"<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>عنوان : </span>".$Title."</p>".
"<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>پیغام : </span>".$Message."</p>";


$headers = "From: wordpress@dmf313.ir" . "\n" . "Content-Type: text/html; charset=UTF-8" . "\r\n";


if (filter_var($EmailTo, FILTER_VALIDATE_EMAIL)) { // this line checks that we have a valid email address
$status = mail($EmailTo, $Title, $content, $headers); // This method sends the mail.


if( $status == true ) {
$Response = "Email Send";
}
else {
$Response = "Error Send Email";
}
}
else {
$Response = "Incorrect Email";
}
}
else
{
$Response = "API is inCorrect";
}


// Send Response
echo $Response;


?>


نتیجه : اینم یه عکس از نمونه ایمیل ارسال شده :
153252



سوال : 1) همین منظورتون بود؟ 2) این کدهای من مشکلی چیزی ندارن؟ مخصوصا از نظر امنیتی! 3) نظری پیشنهادی چیزی بود حتما بگید لطفا.
دقیقا منظورمون همین بود
فقط یه نکته به جای httpwebrequest از httclient استفاده کنید هم ساده تره هم مخصوص کار با api هستش
c# - How to make an HTTP POST web request - Stack Overflow (https://stackoverflow.com/questions/4015324/how-to-make-an-http-post-web-request)

md3848
جمعه 03 اردیبهشت 1400, 11:10 صبح
حالا یه موردی، چطوری برای هر کاربر api مخصوص بهشو ایجاد کنم؟ یا این که از یه پسورد یا همون api ثابت برا همه کاربرا استفاده کنم؟ کاربرا نیازی به login شدن یا ساخت حساب برای برنامه ندارد

اینم با کلاسی که شما گفتید - تست کردم جواب داد - بنظر بهتر میاد، ولی کاش میشد وقفه ای چیزی میداشت و ازش استفاده میکردم، مثلا وقفه/event دریافت داده یا همون response :
private static readonly HttpClient client = new HttpClient();private async System.Threading.Tasks.Task<string> SendDataToWebpage_HttpClient()
{
string url = "https://dmf313.ir/IslamicApp/index.php";


var values = new Dictionary<string, string>
{
{ "API", "abcd!" },
{ "Name", "Mahdi" },
{ "Email", "1@2.3" },
{ "Title", "Test Title" },
{ "Message", "Test Message" },
};
var content = new FormUrlEncodedContent(values);


var response = await client.PostAsync(url, content);


var responseString = await response.Content.ReadAsStringAsync();


Debug.WriteLine("response = " + responseString);


return responseString;
}

barnamenevisjavan
جمعه 03 اردیبهشت 1400, 18:12 عصر
حالا یه موردی، چطوری برای هر کاربر api مخصوص بهشو ایجاد کنم؟ یا این که از یه پسورد یا همون api ثابت برا همه کاربرا استفاده کنم؟ کاربرا نیازی به login شدن یا ساخت حساب برای برنامه ندارد

اینم با کلاسی که شما گفتید - تست کردم جواب داد - بنظر بهتر میاد، ولی کاش میشد وقفه ای چیزی میداشت و ازش استفاده میکردم، مثلا وقفه/event دریافت داده یا همون response :
private static readonly HttpClient client = new HttpClient();private async System.Threading.Tasks.Task<string> SendDataToWebpage_HttpClient()
{
string url = "https://dmf313.ir/IslamicApp/index.php";


var values = new Dictionary<string, string>
{
{ "API", "abcd!" },
{ "Name", "Mahdi" },
{ "Email", "1@2.3" },
{ "Title", "Test Title" },
{ "Message", "Test Message" },
};
var content = new FormUrlEncodedContent(values);


var response = await client.PostAsync(url, content);


var responseString = await response.Content.ReadAsStringAsync();


Debug.WriteLine("response = " + responseString);


return responseString;
}
همون api ثابت خوبه نیازی به تولید api برای هر کاربر نیست
من متوجه منظورتون از وقفه نشدم ولی اگر منظورتون اینه که چک کنید عملیات موفقیت امیز بوده یا نه میتونید از کد زیر استفاده کنید
response.EnsureSuccessStatusCode();
اگر عملیات درست پیش نره اینجا اکسپشن میگیره و جلوتر نمیره

رامین مرادی
شنبه 04 اردیبهشت 1400, 10:03 صبح
حالا یه موردی، چطوری برای هر کاربر api مخصوص بهشو ایجاد کنم؟ یا این که از یه پسورد یا همون api ثابت برا همه کاربرا استفاده کنم؟ کاربرا نیازی به login شدن یا ساخت حساب برای برنامه ندارد

اینم با کلاسی که شما گفتید - تست کردم جواب داد - بنظر بهتر میاد، ولی کاش میشد وقفه ای چیزی میداشت و ازش استفاده میکردم، مثلا وقفه/event دریافت داده یا همون response :
private static readonly HttpClient client = new HttpClient();private async System.Threading.Tasks.Task<string> SendDataToWebpage_HttpClient()
{
string url = "https://dmf313.ir/IslamicApp/index.php";


var values = new Dictionary<string, string>
{
{ "API", "abcd!" },
{ "Name", "Mahdi" },
{ "Email", "1@2.3" },
{ "Title", "Test Title" },
{ "Message", "Test Message" },
};
var content = new FormUrlEncodedContent(values);


var response = await client.PostAsync(url, content);


var responseString = await response.Content.ReadAsStringAsync();


Debug.WriteLine("response = " + responseString);


return responseString;
}


اسم سایتتون رو دیدم تازه فهمیدم کی هستید :لبخندساده::لبخندساده::لبخن ساده: مهندس ارادت داریم خدمتتون از پروژه هاتون بهره کافی رو میبریم. همینجا گفتم یه تشکری ازتون بکنم:تشویق:

اگه برنامتون زیاد حساس نیست همون ثابت کافیه مگر اینکه نگران اسپم باشید. اینجور مواقع استفاده ز نام کاربری یا ایجاد یه توکن میتونه راه گشا باشه. ولی در کل این مورد رو بیشتر تو اپلیکیشن ها دیدم استفاده کنن یا سامانه هایی که به مشتریا میدن و بابت خدماتشون هزینه دریافت میکنن. وگرنه وب سرویس های رایگان ندیدم از توکن استفاده کنن. در کل خودتونم میتونید یه الگوریتم بنویسید برای احرراز هویت. مثلا شناسه سخت افزاری شخصی که نرم افزارتون رو خریده و موقع دریافت فیدبک شناسه رو هم چک کنید ببینید مشتریتون این فیدبک رو فرستاده یا نه در کل تو برنامه نویسی n تا راه هست براش(به قول اون دیالوگ معروف *به تعداد آدمها راه برای رسیدن به خدا هست.)



یه توصیه هم چون به صورت ایمیل میخواید بفرستید حواستون به هاست باشه که بعضی از هاست ها محدودیت تعداد ارسال ایمیل داره. همچنین اگه احراز هویت نکنید یا توکن نزارید این آدرس لو بره یه از خدا بیخبری میاد و هی به این وب سرویس درخواست میفرسته و سیستم شروع به ارسال ایمیلهای تکراری میکنه و دامنتون به عنوان اسپم شناخته میشه و دیگه میرید تو بلک لیست مثلا گوگل.

md3848
شنبه 04 اردیبهشت 1400, 16:53 عصر
0

من متوجه منظورتون از وقفه نشدم ولی اگر منظورتون اینه که چک کنید عملیات موفقیت امیز بوده یا نه میتونید از کد زیر استفاده کنید
response.EnsureSuccessStatusCode();

از این کد استفاده کردم، فک کنم فرقی نداشته باشه با کد بالایی، البته امیدوارم.
if (httpResponseMessage.StatusCode == HttpStatusCode.OK)

1

یه توصیه هم چون به صورت ایمیل میخواید بفرستید حواستون به هاست باشه که بعضی از هاست ها محدودیت تعداد ارسال ایمیل داره. همچنین اگه احراز هویت نکنید یا توکن نزارید این آدرس لو بره یه از خدا بیخبری میاد و هی به این وب سرویس درخواست میفرسته و سیستم شروع به ارسال ایمیلهای تکراری میکنه و دامنتون به عنوان اسپم شناخته میشه و دیگه میرید تو بلک لیست مثلا گوگل.
آره بیشتر نگران همین هستم، البته نگران رفتن تو بلک لیست شرکت ارائه دهنده هاست! چون ایمیلا در روز از یه تعدادی بیشتر بشه مسدود میکنن و میگن باید سرویس ایمیل بخری که اونم ماهانه یه مقداری باید به شرکت داد ( تجربه این مشکلو قبلا داشتم :لبخند: )، لیست سیاه گوگل هم که...

2
این نمونه داده ای که من به کمک متد post با C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ارسال کردم و به کمک نرم افزار HHTP Debugger داده هاشو بدست ابردم که خب پسورد هم شاملش میشه ( البته بعضی کاراکتر ها رو اومده به فرمت HEX نمایش داده مثلا ! و ؟، حالا چرا نمیدونم ولی در کل تو NODEPAD پایین پسوردو خودم بدست ابردم که کار ساده ای هم هستش! متاسفانه ) : مارو باش که فک میکردیم متد POST از GET بهتره و کسی به داده هاش دسترسی نداره :عصبانی++: یعنی هر داده ای که من ارسال کنم هر کسی میتونه بهش دسترسی داشته باشه. :تشویق:

153255

153256



3

اگه برنامتون زیاد حساس نیست همون ثابت کافیه مگر اینکه نگران اسپم باشید. اینجور مواقع استفاده ز نام کاربری یا ایجاد یه توکن میتونه راه گشا باشه. ولی در کل این مورد رو بیشتر تو اپلیکیشن ها دیدم استفاده کنن یا سامانه هایی که به مشتریا میدن و بابت خدماتشون هزینه دریافت میکنن. وگرنه وب سرویس های رایگان ندیدم از توکن استفاده کنن. در کل خودتونم میتونید یه الگوریتم بنویسید برای احرراز هویت. مثلا شناسه سخت افزاری شخصی که نرم افزارتون رو خریده و موقع دریافت فیدبک شناسه رو هم چک کنید ببینید مشتریتون این فیدبک رو فرستاده یا نه
جدا هنگ کردم نمیدونم از چه روشی استفاده کنم که جلو SPAM شدن رو بگیرم؛ اولا نرم افزار رایگانه، نیازی به ساخت اکانت هم نی، مگه این که من برنامه نویس برای هر کاربر یه اکانت ایجاد کنم، مثلا نام کاربریش بشه CPU ID و پسورد بشه یه فرمولی که توش CPU ID دخیله؛ ولی خب بازم هر کاری بکنم و هر نوع داده ای هم ارسال بکنم بازم به کمک HHTP Debugger ها میشه به داده دسترسی پیدا کرد و همون داده رو SPAM کرد!:عصبانی++: الان واقعا نمیدونم باید چیکار کنم برا حل این مشکل :گریه: مگه این که پسوردی رو ارسال کرد که هر بار در هر درخواستی که ارسال میشه توسط C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎، این پسورد تغییر کنه، اینطوری طرف با SPAM کردن اون درخواست با اون دیتایی که داره، موفق به SPAM نمیشه، فعلا بهترین ایده و تنها ترین ایده کاربردی فک کنم همین باشه، درست میگم یا روش بهتری هم هستش؟


4
یکم سرچ کردم توکن / Token رو هم دقیقا نفهمیدم چی هست و چطور کار میکنه، حالا بیشتر مطالعه میکنم ببینم چی هس و چطور میتونه کمکم کنه، نتیجه رو همینجا میگم.
مطالب مرتبط :
SecurityToken Class (https://docs.microsoft.com/en-us/dotnet/api/system.identitymodel.tokens.securitytoken?view=dot net-plat-ext-5.0)
How to: Create a Custom Token (https://docs.microsoft.com/en-us/dotnet/framework/wcf/extending/how-to-create-a-custom-token)

336699
شنبه 04 اردیبهشت 1400, 19:53 عصر
خب اول بررسی کن ببین سرتیفیکیت HHTP Debugger در لیست سرتیفیکیتها هست یا نه(با کد نویسی)

اگه بود حذفش کن(با کد نویسی):لبخند: اینطوری تا وقتی HHTP Debugger باز باشه دسترسی به نت نداره:لبخند:

153257

md3848
یک شنبه 05 اردیبهشت 1400, 03:40 صبح
یه سوال، منظور از token این مقداری هستش که در کد زیر اعمال کردم؟
// set Authorizationvar
byteArray = Encoding.ASCII.GetBytes("user1:pass1");
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(byteArray));
خب این Authorization هم قابل مشاهده هستش توسط http debuger.

153261

که خب سمت php، یوزر پس داخل Authorization توسط کد زیر خونده میشه :
$_SERVER['PHP_AUTH_USER']
$_SERVER['PHP_AUTH_PW']
لینک فایل php، رو هم تو مرورگر باز کنیم به صورت زیر نمایش داده میشه که همون اول تقاضای یوزر-پس میکنه :

153262

------------------

خب من دارم کم کم هنگ میکنم، خب یه مرور کنیم، الان من مشکل spam شدن درخواست Feedback ( که خب درخواست ارسال میشه به وب، و اونجا میاد درخواستو میخونه و به ایمیل از قبل تعریف شده، اطلاعاتو ایمیل میکنه، کل داستان همینه ) رو دارم تا هاست و گوگل برام مشکل ایجاد نکنن، خب حالا بخوام جلو spam رو بگیرم باید هر کاربر واقعا 1 کاربر باشه و هر کاربری که از نرم افزار استفاده میکنه، یه کد خاص داشته باشه، و رو اون کد خاص من محدودیت اعمال کنم که مثلا هر روز میتونه حداکثر 10 تا ایمیل ارسال کنه اونم با فاصله زمانی 5 دقیقه مثلا.
خب اگه من بیام از کد ثابت استفاده کنم چی میشه؟ خب دیگه باید با بحث ایجاد محدودیت 10 تا ایمیل در روز و این داستانا خدا حافظی کرد! ولی اگه هر کاربر کد مخصوص خودشو داشته باشه ( که انگار بهش میگن TOKEN ) دیگه بحث ایجاد محدودیت کار قابل انجام و قابل عملیاتی شدن و ساده ای بنظر میاد؛ خب حالا باید این داستان ایجاد TOKEN طوری باشه که کسی به فرمولش پی نتونه ببره تا به کمک فرمول فوق، بیاد شونصد تا TOKEN برا خودش ایجاد کنه و مشکلاتی رو ایجاد کنه که کمترینش SPAM شدن درخواست ها هستش، ( و اگه نرم افزار پولی باشه و کاربر بابت امکانی که ازش استفاده میکنه پول میده که بدتر، ولی خب نرمافزار ما رایگان هستش و فقط مشکل با بحث SPAM شدن هستش فعلا ) ---> فلذا من باید رو بحث ایجاد TOKEN قابل اعتماد! تمرکز کنم، این توکن هم در قسمت Authorization ( که در بالای بهش اشاره کردم ) یا داخل content میتونه قرار بگیره و سمت PHP بعد پردازشش میشه کرد.... اینایی که گفتم درست بود؟ درست متوجه داستان شدم؟ :لبخند::گیج:

-------------

دو نوع توکن داریم ( Refresh Tokens: When to Use Them and How They Interact with JWTs (https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/) ) :
1) Access tokens : که نیاز به سرور ندارن!
2) Access tokens : که نیاز به سرور دارن!!

رامین مرادی
یک شنبه 05 اردیبهشت 1400, 12:32 عصر
برا توکن بهتره هرکی نرم افزار رو نصب میکنه یه یوزر پس بدید بهش حالا از طریق ثبت نام یا هرچیزی.
بعد که کاربر با اون یوزر برنامتون رو باز میکنه هر لحظه که میخواد یه فیدبک براتون بفرسته یک شناسه خاص چند رقمی ایجاد کنید که الگوریتم اونو خودتون میدونید. بعد تو سرور همون لحظه شناسه رو بررسی کنید اگه با الگوریتمتون سازگار بود و با اون یوزر پسی که به کاربر دادید جور دراومد اقدام به ارسال ایمیل کنید.

درضمن من هنوز نمیدونم چرا میخواید از ایمیل استفاده کنید؟!!!:متفکر: چجوری میخواید از این ایمیل ها آمارگیری کنید یا مثلا نظرات رو دسته بندی کنید یا مدیریت کنید؟؟؟
بهتر نیست تو همون هاست یه دیتابیس بسازید و اونجا ذخیره کنید؟ اینجوری گزارش گیری هم براتون راحت تر میشه.

336699
یک شنبه 05 اردیبهشت 1400, 13:09 عصر
شما که از وردپرس استفاده میکنید یه پلاگین کپچا نصب کنید و ...

حالا اگه کد کپچای ارسالی از طرف کاربر درست باشه پیام ثبت میشه

----------------------------------------------------------------------------------------
شما که نگران اسپم هستید پس چرا قسمت نظرات سایت کپچا نداره؟:لبخند:

Mahmoud.Afrad
دوشنبه 06 اردیبهشت 1400, 22:28 عصر
قدم اول ببینید چطور میشه هر کاربر را شناخت.
بعد ، وقتی شخص نیاز به ارسال فیدبک داشت بایست از سرور ، توکن با طول عمر مشخص دریافت بشه. پس در سرور باید اطلاعات درخواست کننده توکن همراه توکن تولیدی و تاریخ و زمان ذخیره بشه. بعد با ارسال هر فیدبک باید چک بشه آخرین ارسال اون شخص کی بوده. اگر مجاز بود ذخیره بشه.