• הרשמה
    • התחברות
    • חיפוש
    • דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • קבלת התראות מהדפדפן
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private

    בקשת POST בC# יוצרת שגיאה

    באגים במערכת
    4
    56
    801
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגיבו כנושא
    התחברו בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • ע
      עידו @צדיק תמים נערך לאחרונה על ידי

      @צדיק-תמים
      זה קוד שלא הצליח לימות המשיח והצליח לאתר אחר

      private async void button3_Click(object sender, EventArgs e)
      {
          using (HttpClient client = new HttpClient())
          {
              string url = $"https://www.call2all.co.il/ym/api/UploadTextFile?token={numberTb.Text}:{passTb.Text}";
      
              var jsonContent = new
              {
                  what = "ivr2:SaleProducts/sale_products_name.ini",
                  contents = textBox1.Text
              };
              var jsonContent1 = System.Text.Json.JsonSerializer.Serialize(jsonContent);
      
              var content = new StringContent(jsonContent1, Encoding.UTF8, "application/json");
      
              // הצגת הבקשה שנשלחת
              textBox1.Text += "\r\n📤 בקשה שנשלחה:\r\n";
              textBox1.Text += $"URL: {url}\r\n";
              textBox1.Text += $"Header: {content.Headers} \r\n";
              textBox1.Text += $"Body: {jsonContent1}\r\n";
              textBox1.Text += "-----------------------------------\r\n";
      
              // שליחת הבקשה
              HttpResponseMessage response = await client.PostAsync(url, content);
              string responseText = await response.Content.ReadAsStringAsync();
      
              // הצגת התגובה מהשרת
              textBox1.Text += "📥 תגובה מהשרת:\r\n";
              textBox1.Text += $"Status Code: {response.StatusCode}\r\n";
              textBox1.Text += $"Response: {responseText}\r\n";
              textBox1.Text += "===================================\r\n";
          }
      }
      

      לעומת קוד שכן מצליח

      private async void button3_Click(object sender, EventArgs e)
      {
          using (HttpClient client = new HttpClient())
          {
              string url = $"https://www.call2all.co.il/ym/api/UploadTextFile?token={numberTb.Text}:{passTb.Text}";
      
              /* var jsonContent = new
               {
                   what = "ivr2:SaleProducts/sale_products_name.ini",
                   contents = textBox1.Text
               };
               var jsonContent1 = System.Text.Json.JsonSerializer.Serialize(jsonContent);
      
               var content = new StringContent(jsonContent1, Encoding.UTF8, "application/json");*/
      
              Dictionary<string, string> json = new Dictionary<string, string>
              {
                  { "what", "ivr2:SaleProducts/sale_products_name.ini" },
                  { "contents", textBox1.Text }
              };
      
             var content = new FormUrlEncodedContent(json);
      
              // הצגת הבקשה שנשלחת
              textBox1.Text += "\r\n📤 בקשה שנשלחה:\r\n";
              textBox1.Text += $"URL: {url}\r\n";
              textBox1.Text += $"Header: {content.Headers} \r\n";
              textBox1.Text += $"Body: {json}\r\n";
              textBox1.Text += "-----------------------------------\r\n";
      
              // שליחת הבקשה
              HttpResponseMessage response = await client.PostAsync(url, content);
              string responseText = await response.Content.ReadAsStringAsync();
      
              // הצגת התגובה מהשרת
              textBox1.Text += "📥 תגובה מהשרת:\r\n";
              textBox1.Text += $"Status Code: {response.StatusCode}\r\n";
              textBox1.Text += $"Response: {responseText}\r\n";
              textBox1.Text += "===================================\r\n";
          }
      }
      
      תגובה 1 תגובה אחרונה תגובה ציטוט 0
      • ע
        עידו @צדיק תמים נערך לאחרונה על ידי עידו

        @צדיק-תמים כתב בבקשת POST בC# יוצרת שגיאה:

        @עידו כתב בבקשת POST בC# יוצרת שגיאה:

        יוסף אביטן

        מי זה? @soris1989? הוא כותב שגם הוא לא הצליח בPOST
        אני רוצה שתראה לי שהבעיה היא רק בC#

        יוסף אביטן זה yosef avitan שכתב מקודם שהצליח

        soris1989 גם הוא כתב בC#

        הקוד שעובד זה באדיבותו, הוא שלח בPOST אבל לא כג'סון, וזה כן התקבל, ניסיתי את זה עכשיו שוב כדי לוודא שזה נכון.

        צ תגובה 1 תגובה אחרונה תגובה ציטוט 0
        • צ
          צדיק תמים מומחה @עידו נערך לאחרונה על ידי צדיק תמים

          @עידו אה, yosef avitan בנושא הזה, מעניין אבל הוא לא הביא קוד אז אני לא יודע מה הוא עשה
          לגבי soris1989 ברור שיכול להיות הבדל בין סוגי content type, אתה אמרת שיש הבדל בשליחה בHTTP POST בין השפות

          ע תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • ע
            עידו @צדיק תמים נערך לאחרונה על ידי עידו

            @צדיק-תמים כתב בבקשת POST בC# יוצרת שגיאה:

            @עידו אה, yosef avitan בנושא הזה, מעניין אבל הוא לא הביא קוד אז אני לא יודע מה הוא עשה
            לגבי soris1989 ברור שיכול להיות הבדל בין סוגי content type, אתה אמרת שיש הבדל בשליחה בHTTP POST בין השפות

            אתה צודק.

            אבל ימות המשיח לפי התיעוד דורשים ג'סון, והם לא מוכנים לקבל אותו כשהוא נשלח ע"י ספריה מסוימת (שבה משתמשים היום) בשפה מסוימת, אולי אני טועה אבל לפי הבנתי יש להם בשרת בעיה עם איך שC# מממשים את הפרוטוקול הזה.

            במילים אחרות, אם אני - מתכנת C# (אני לא, למעשה אני רחוק מזה, אבל זה לא הנקודה) - רוצה לכתוב קוד שיתקשר עם השרת שלהם, והולך לפי התיעוד הרשמי שלהם, אני בבעיה, מה שאין כן אם אני מתכנת בPHP או שפות אחרות, שאז הכל חלק.

            צ תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • צ
              צדיק תמים מומחה @עידו נערך לאחרונה על ידי צדיק תמים

              @עידו כתב בבקשת POST בC# יוצרת שגיאה:

              והם לא מוכנים לקבל אותו כשהוא נשלח ע"י ספריה מסוימת (שבה משתמשים היום) בשפה מסוימת, אולי אני טועה אבל לפי הבנתי יש להם בשרת בעיה עם איך שC# מממשים את הפרוטוקול הזה.

              במילים אחרות, אם אני - מתכנת C# (אני לא, למעשה אני רחוק מזה, אבל זה לא הנקודה) - רוצה לכתוב קוד שיתקשר עם השרת שלהם, והולך לפי התיעוד הרשמי שלהם, אני בבעיה, מה שאין כן אם אני מתכנת בPHP או שפות אחרות, שאז הכל חלק.

              על זה בדיוק אני אומר שאין כזה דבר (כלומר הכל יכול להיות תיאורטית, הכוונה שיש לזה סבירות אפסית), ובוא ננסה להבין איפה שורש הבעיה. כי היא ב100% לא במימוש של C#
              אתה מכיר את mitmproxy? יש לו ממשק וובי שמאפשר לראות את התוכן בפועל של בקשות

              ע 2 תגובות תגובה אחרונה תגובה ציטוט 0
              • ע
                עידו @צדיק תמים נערך לאחרונה על ידי

                @צדיק-תמים כתב בבקשת POST בC# יוצרת שגיאה:

                @עידו כתב בבקשת POST בC# יוצרת שגיאה:

                והם לא מוכנים לקבל אותו כשהוא נשלח ע"י ספריה מסוימת (שבה משתמשים היום) בשפה מסוימת, אולי אני טועה אבל לפי הבנתי יש להם בשרת בעיה עם איך שC# מממשים את הפרוטוקול הזה.

                במילים אחרות, אם אני - מתכנת C# (אני לא, למעשה אני רחוק מזה, אבל זה לא הנקודה) - רוצה לכתוב קוד שיתקשר עם השרת שלהם, והולך לפי התיעוד הרשמי שלהם, אני בבעיה, מה שאין כן אם אני מתכנת בPHP או שפות אחרות, שאז הכל חלק.

                על זה בדיוק אני אומר שאין כזה דבר (כלומר הכל יכול להיות תיאורטית, הכוונה שיש לזה סבירות אפסית), ובוא ננסה להבין איפה שורש הבעיה. כי היא ב100% לא במימוש של C#

                נכון, היא במימוש של ימות המשיח, כי שם זה לא עובד... באתרים אחרים כן...

                צ תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • ע
                  עידו @צדיק תמים נערך לאחרונה על ידי

                  @צדיק-תמים כתב בבקשת POST בC# יוצרת שגיאה:

                  אתה מכיר את mitmproxy? יש לו ממשק וובי שמאפשר לראות את התוכן בפועל של בקשות

                  לא מכיר, אבל גם jsonplaceholder נותן אפשרות

                  תגובה 1 תגובה אחרונה תגובה ציטוט 0
                  • צ
                    צדיק תמים מומחה @עידו נערך לאחרונה על ידי צדיק תמים

                    @עידו כתב בבקשת POST בC# יוצרת שגיאה:

                    @צדיק-תמים כתב בבקשת POST בC# יוצרת שגיאה:

                    @עידו כתב בבקשת POST בC# יוצרת שגיאה:

                    והם לא מוכנים לקבל אותו כשהוא נשלח ע"י ספריה מסוימת (שבה משתמשים היום) בשפה מסוימת, אולי אני טועה אבל לפי הבנתי יש להם בשרת בעיה עם איך שC# מממשים את הפרוטוקול הזה.

                    במילים אחרות, אם אני - מתכנת C# (אני לא, למעשה אני רחוק מזה, אבל זה לא הנקודה) - רוצה לכתוב קוד שיתקשר עם השרת שלהם, והולך לפי התיעוד הרשמי שלהם, אני בבעיה, מה שאין כן אם אני מתכנת בPHP או שפות אחרות, שאז הכל חלק.

                    על זה בדיוק אני אומר שאין כזה דבר (כלומר הכל יכול להיות תיאורטית, הכוונה שיש לזה סבירות אפסית), ובוא ננסה להבין איפה שורש הבעיה. כי היא ב100% לא במימוש של C#

                    נכון, היא במימוש של ימות המשיח, כי שם זה לא עובד... באתרים אחרים כן...

                    אתה יודע מה זה פרוטוקול? ובפרט מה זה פרוטוקול HTTP?
                    אם תלמד את זה תבין למה לא יכול להיות שיש בעיה בימות והיא צצה רק כששולחים HTTP POST בC# ולא כששולחים HTTP POST בשפות אחרות. בשום שלב לא טענתי שאין בעיה בימות אלא שאין שום קשר ל C#
                    אגב לגבי mitmpproxy, יש גם את proxyman עם ממשק יותר ידידותי ונסיון חינם

                    ע תגובה 1 תגובה אחרונה תגובה ציטוט 0
                    • ע
                      עידו @צדיק תמים נערך לאחרונה על ידי

                      @צדיק-תמים אני יודע איך הבקשה נראית בפועל, אני כבר אחרי כל זה...

                      צ תגובה 1 תגובה אחרונה תגובה ציטוט 0
                      • צ
                        צדיק תמים מומחה @עידו נערך לאחרונה על ידי צדיק תמים

                        @עידו אם אתה יודע בטח תוכל להסביר מה ההבדל בין הבקשת POST JSON שאתה שולח ב C# ולא עובדת לבקשת POST JSON שאחרים שולחים וכן עובדת 🙂
                        זה מה שאני מבקש מההתחלה
                        ואם תאמר שאין הבדל - אז שוב, אין קשר לC#

                        ע תגובה 1 תגובה אחרונה תגובה ציטוט 0
                        • ע
                          עידו @צדיק תמים נערך לאחרונה על ידי

                          @צדיק-תמים
                          אני יודע 3 דברים:

                          1. שאותה בקשת ג'סון עובדת באתר אחד, ואצל ימות המשיח לא עובדת.
                          2. כשאחרים שלחו ג'סון בC# זה לא עבד להם.
                          3. כששולחים בשפות אחרות זה כן עובד.

                          מה רץ מאחורי הקלעים ואיזה עוד אינפורמציה מועברת בדרך, אני לא יודע.

                          מה שבטוח ימות המשיח מסרבים להתייחס לתוכן הג'סון.

                          צ תגובה 1 תגובה אחרונה תגובה ציטוט 0
                          • צ
                            צדיק תמים מומחה @עידו נערך לאחרונה על ידי צדיק תמים

                            @עידו כתב בבקשת POST בC# יוצרת שגיאה:

                            כששולחים בשפות אחרות זה כן עובד.

                            מי אמר? בדקת?
                            מדגיש, אותה צורה בדיוק - HTTP POST, מסוג JSON, ושכל הפרמטרים בגוף הבקשה

                            S תגובה 1 תגובה אחרונה תגובה ציטוט 0
                            • S
                              soris1989 @צדיק תמים נערך לאחרונה על ידי soris1989

                              @צדיק-תמים אני בדקתי, ומה ש@עידו אומר זה אמת.
                              יש בעיה בסיריאליזציה ב-C#, אגב, בדקתי את זה ב-postman וזה עובד (עם בקשת POST), ובדקתי את זה גם ב-PHP וזה גם עובד (גם עם בקשת POST).

                              אם יש לך השגות על מה שנאמר כאן, אני מזמין אותך לנסות בעצמך את הנ"ל.

                              צ תגובה 1 תגובה אחרונה תגובה ציטוט 1
                              • צ
                                צדיק תמים מומחה @soris1989 נערך לאחרונה על ידי

                                @soris1989 כתב בבקשת POST בC# יוצרת שגיאה:

                                אני בדקתי, ומה ש@עידו אומר זה אמת.
                                יש בעיה בסיריאליזציה ב-C#

                                איך נראה האובייקט עם הסריאליזציה הפגומה ואיך הוא היה אמור להיראות?

                                @soris1989 כתב בבקשת POST בC# יוצרת שגיאה:

                                בדקתי את זה ב-postman וזה עובד (עם בקשת POST)

                                POST JSON? ככה?
                                8c1ef5b5-d88c-4288-9711-dbafc5df00f0-CleanShot 2025-02-18 at 22.06.02@2x.png
                                אתה יכול לעשות בסרגל הצד של פוסטמן ייצוא לCURL ולהעתיק לכאן?

                                S תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                • S
                                  soris1989 @צדיק תמים נערך לאחרונה על ידי soris1989

                                  @צדיק-תמים

                                  POSTMAN:
                                  curl --location --request POST 'https://www.call2all.co.il/ym/api/UploadTextFile' \
                                  --header 'Content-Type: application/json' \
                                  --data-raw '{
                                      "token": "<username>:<password>",
                                      "what": "ivr2:14/text_file.ini",
                                      "contents": "Some text message"
                                  }'
                                  
                                  c#:
                                  curl -X POST -d '{"token":"<username>:<password>","what":"ivr2:14/text_file.ini","contents":"Some test message"}' https://www.call2all.co.il/ym/api/UploadTextFile
                                  

                                  תגוובה ב-POSTMAN:

                                  {
                                      "responseStatus": "OK",
                                      "message": "ok",
                                      "yemotAPIVersion": 6
                                  }
                                  

                                  תגובה ב-C#:

                                  Response: {"yemotAPIVersion":6,"responseStatus":"EXCEPTION","message":"IllegalStateException(session token is required)"
                                  

                                  אז ככה, ב-C# ברגע שאתה משייך flag של -d ל-curl, זה אוטומטית יוצר בקשה עם:

                                  Content-Type: application/x-www-form-urlencoded
                                  

                                  וזה לא נשלח עם:

                                  Content-Type: application/json
                                  

                                  ה-body שנשלח לשרת של ימות הוא בפורמט json בעוד שה-content-type בפורמט של:
                                  x-url-encoded.

                                  לאחר מכן, ניסיתי לכפות על ה-httpClient לשים header של Content-Type: application/json, אך הוא מתעלם מזה....

                                  ומכאן נובעת השגיאה, הבעיה היא לא בימות המשיח, אלא באופן בניית ה-CURL ב-C#, שה-body שנשלח לא תואם ל-content-type ב-header.

                                  S ע צ 3 תגובות תגובה אחרונה תגובה ציטוט 0
                                  • S
                                    soris1989 @soris1989 נערך לאחרונה על ידי soris1989

                                    @צדיק-תמים במידה ואתה חפץ לבדוק זאת בעצמך, זה הקוד:

                                    static async Task UploadTextFileWithPost2()
                                    {
                                                var url = "https://www.call2all.co.il/ym/api/UploadTextFile";
                                    
                                                try
                                                {
                                                    var client = new HttpClient();
                                    
                                                    var obj = new
                                                    {
                                                        token = $"{Username}:{Password}",
                                                        what = "ivr2:14/text_file.ini",
                                                        contents = "Some test message"
                                                    };
                                    
                                                    var json = JsonConvert.SerializeObject(obj);
                                                    var content = new StringContent(json, Encoding.UTF8, "application/json");
                                    
                                                    var responseJ2 = await client.PostAsync(url, content);
                                    
                                                    // בדיקת מצב התגובה
                                                    if (responseJ2.IsSuccessStatusCode)
                                                    {
                                                        // קריאת התוכן של התגובה
                                                        var responseContent2 = await responseJ2.Content.ReadAsStringAsync();
                                                        Console.WriteLine($"Response: {responseContent2}");
                                                    }
                                                    else
                                                    {
                                                        Console.WriteLine($"Error: {responseJ2.StatusCode}");
                                                        return;
                                                    }
                                                }
                                                catch (Exception ex)
                                                {
                                                    Console.WriteLine($"Exception: {ex.Message}");
                                                }
                                    
                                                await Task.Delay(1000);
                                                Console.WriteLine("Async work done!");
                                     }
                                    
                                    תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                    • ע
                                      עידו @soris1989 נערך לאחרונה על ידי

                                      @soris1989 כתב בבקשת POST בC# יוצרת שגיאה:

                                      @צדיק-תמים

                                      POSTMAN:
                                      curl --location --request POST 'https://www.call2all.co.il/ym/api/UploadTextFile' \
                                      --header 'Content-Type: application/json' \
                                      --data-raw '{
                                          "token": "<username>:<password>",
                                          "what": "ivr2:14/text_file.ini",
                                          "contents": "Some text message"
                                      }'
                                      
                                      c#:
                                      curl -X POST -d '{"token":"<username>:<password>","what":"ivr2:14/text_file.ini","contents":"Some test message"}' https://www.call2all.co.il/ym/api/UploadTextFile
                                      

                                      תגוובה ב-POSTMAN:

                                      {
                                          "responseStatus": "OK",
                                          "message": "ok",
                                          "yemotAPIVersion": 6
                                      }
                                      

                                      תגובה ב-C#:

                                      Response: {"yemotAPIVersion":6,"responseStatus":"EXCEPTION","message":"IllegalStateException(session token is required)"
                                      

                                      אז ככה, ב-C# ברגע שאתה משייך flag של -d ל-curl, זה אוטומטית יוצר בקשה עם:

                                      Content-Type: application/x-www-form-urlencoded
                                      

                                      וזה לא נשלח עם:

                                      Content-Type: application/json
                                      

                                      ה-body שנשלח לשרת של ימות הוא בפורמט json בעוד שה-content-type בפורמט של:
                                      x-url-encoded.

                                      לאחר מכן, ניסיתי לכפות על ה-httpClient לשים header של Content-Type: application/json, אך הוא מתעלם מזה....

                                      ומכאן נובעת השגיאה, הבעיה היא לא בימות המשיח, אלא באופן בניית ה-CURL ב-C#, שה-body שנשלח לא תואם ל-content-type ב-header.

                                      לא ממש הבנתי על איזה flag או d דיברת, אבל זה מעניין, למה אתרים אחרים כן מקבלים את זה?

                                      ולכאורה בקוד פשוט שלחת JSON אז למה בכל זאת הוא לא שולח את זה כסוג JSON?

                                      S תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                      • S
                                        soris1989 @עידו נערך לאחרונה על ידי soris1989

                                        @עידו כתב בבקשת POST בC# יוצרת שגיאה:

                                        curl -X POST -d

                                        זה ה-flag:

                                        curl -X POST *-d*
                                        
                                        ע תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                        • ע
                                          עידו @soris1989 נערך לאחרונה על ידי

                                          @soris1989 אבל בקוד רגיל בC# לא מוסיפים את זה, אני לא הוספתי בכל אופן...

                                          S תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                          • S
                                            soris1989 @עידו נערך לאחרונה על ידי soris1989

                                            @עידו הרצתי עכשיו דרך ה-bash סידרה של שליחת בקשות CURL של POST, ואכן שבשביל שזה יעבוד, צריך להוריד את ה-flag של -d, ובמקום זה לשים flags של:

                                            \--header "Content-Type: application/json" \--data-raw '{"token":"<username>:<password>","what":"ivr2:14/text_file.ini","contents":"Some test message"}'
                                            

                                            לגבי זה שזה עובד במקרים אחרים, אני לא יודע מה לומר לך. מה שכן, בשביל שזה יעבוד בפורמט JSON אתה תצטרך ככל הנראה לבנות CURL באופן ידני, כי ה-httpClient.PostAsync לא בונה נכון את ה-CURL.

                                            בכל אופן, הצעתי לך אתמול פתרון שכן עובד, תשתמש בו.

                                            ע תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                            • פוסט ראשון
                                              פוסט אחרון