h.ranjbar72
شنبه 23 تیر 1403, 12:14 عصر
سلام دوستان
ما با یک وب سرویس سروکار داریم که فقط توی درخواست های با متد POST یک تغییراتی اعمال کرده و هنگام ارسال درخواست از سمت کد #C با خطای Bad Request از سمت سرور مواجه میشیم ولی هنگام ارسال درخواست با نرم افزار Postman براحتی جواب از سرور برمیگرده.
طبق بررسی که انجام دادم متوجه شدم تنها تفاوت درخواست ارسالی بین کد #C و نرم افزار Postman ست کردن مقدار x-sess-uuid در Header درخواست توسط نرم افزار Postman هست که نمیدونم چطوری خودکار این مقدار را توی هر درخواست جدید میسازه.
تلاش کردم همون مقدار x-sess-uuid که نرم افزار postman ست کرده را در Header درخواست از سمت #C هم اعمال کنم اما همچنان خطای Bad Request از سمت سرور برمیگرده.
سوالم اینه :
کسی اطلاع داره چطوری میشه این مقدار x-sess-uuid که مقدارش هر دفعه هم متغیره را از سمت کد #C تولیدش کرد و توی Header درخواست ست کرد؟
چطوری نرم افزار Postman تشخیص میده که وب سرویس اونسمت به این پارامتر توی Header درخواست نیاز داره و این مقدار را بر اساس چه فرمولی تولید میکنه؟
نمونه کد ارسال درخواست های REST را پایین قرار میدم.
155867
155868
155869
using System.Net;
using System.Net.Http;
using System.Net.Security;
using System.Web.Script.Serialization;
public static HttpResponseMessage WebReq = null;
public static string base_url = myProject.Properties.Settings.Default.URLWebServic e;
public enum MethodType
{
GET = 0,
POST = 1,
DELETE = 2
}
public static void sendRestRequest(string Route, MethodType Type, object Parameters, Dictionary<string, string> Headers = null, Dictionary<string, string> Cookies = null)
{
string URL = base_url + Route;
ServicePointManager.ServerCertificateValidationCal lback = new RemoteCertificateValidationCallback(delegate { return true; });
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer, AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate })
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri(URL);
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 PostmanRuntime/7.39.0 insomnia/9.3.2");
if (Headers != null)
{
foreach (var header in Headers)
{
client.DefaultRequestHeaders.Add(header.Key, header.Value);
}
}
if (Cookies != null)
{
foreach (var cookie in Cookies)
{
cookieContainer.Add(client.BaseAddress, new Cookie(cookie.Key, cookie.Value));
}
}
switch (Type)
{
case MethodType.GET:
WebReq = client.GetAsync(new Uri(URL)).Result;
break;
case MethodType.POST:
var objAsJson = new JavaScriptSerializer().Serialize(Parameters);
var stringContent = new StringContent(objAsJson, Encoding.UTF8, "application/json");
WebReq = client.PostAsync(URL, stringContent).Result;
break;
case MethodType.DELETE:
WebReq = client.DeleteAsync(URL).Result;
break;
}
if (WebReq != null && WebReq.StatusCode == HttpStatusCode.OK)
{
WebReq.EnsureSuccessStatusCode();
OnSuccess();
}
else
{
OnFailure();
}
}
}
//use function
Dictionary<string, string> headers = new Dictionary<string, string>();
Dictionary<string, string> cookies = new Dictionary<string, string>();
headers.Add("x-sess-uuid", "0.7f257e68.1720850372.31438db5");
cookies.Add("x-sess-uuid", "0.7f257e68.1720850372.31438db5");
cookies.Add("Path", "/v1/api/iserver/auth");
cookies.Add("Secure", "");
cookies.Add("HttpOnly", "");
var response = sendRestRequest("/iserver/auth/status", MethodType.POST, null, headers, cookies);
//
ما با یک وب سرویس سروکار داریم که فقط توی درخواست های با متد POST یک تغییراتی اعمال کرده و هنگام ارسال درخواست از سمت کد #C با خطای Bad Request از سمت سرور مواجه میشیم ولی هنگام ارسال درخواست با نرم افزار Postman براحتی جواب از سرور برمیگرده.
طبق بررسی که انجام دادم متوجه شدم تنها تفاوت درخواست ارسالی بین کد #C و نرم افزار Postman ست کردن مقدار x-sess-uuid در Header درخواست توسط نرم افزار Postman هست که نمیدونم چطوری خودکار این مقدار را توی هر درخواست جدید میسازه.
تلاش کردم همون مقدار x-sess-uuid که نرم افزار postman ست کرده را در Header درخواست از سمت #C هم اعمال کنم اما همچنان خطای Bad Request از سمت سرور برمیگرده.
سوالم اینه :
کسی اطلاع داره چطوری میشه این مقدار x-sess-uuid که مقدارش هر دفعه هم متغیره را از سمت کد #C تولیدش کرد و توی Header درخواست ست کرد؟
چطوری نرم افزار Postman تشخیص میده که وب سرویس اونسمت به این پارامتر توی Header درخواست نیاز داره و این مقدار را بر اساس چه فرمولی تولید میکنه؟
نمونه کد ارسال درخواست های REST را پایین قرار میدم.
155867
155868
155869
using System.Net;
using System.Net.Http;
using System.Net.Security;
using System.Web.Script.Serialization;
public static HttpResponseMessage WebReq = null;
public static string base_url = myProject.Properties.Settings.Default.URLWebServic e;
public enum MethodType
{
GET = 0,
POST = 1,
DELETE = 2
}
public static void sendRestRequest(string Route, MethodType Type, object Parameters, Dictionary<string, string> Headers = null, Dictionary<string, string> Cookies = null)
{
string URL = base_url + Route;
ServicePointManager.ServerCertificateValidationCal lback = new RemoteCertificateValidationCallback(delegate { return true; });
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer, AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate })
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri(URL);
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 PostmanRuntime/7.39.0 insomnia/9.3.2");
if (Headers != null)
{
foreach (var header in Headers)
{
client.DefaultRequestHeaders.Add(header.Key, header.Value);
}
}
if (Cookies != null)
{
foreach (var cookie in Cookies)
{
cookieContainer.Add(client.BaseAddress, new Cookie(cookie.Key, cookie.Value));
}
}
switch (Type)
{
case MethodType.GET:
WebReq = client.GetAsync(new Uri(URL)).Result;
break;
case MethodType.POST:
var objAsJson = new JavaScriptSerializer().Serialize(Parameters);
var stringContent = new StringContent(objAsJson, Encoding.UTF8, "application/json");
WebReq = client.PostAsync(URL, stringContent).Result;
break;
case MethodType.DELETE:
WebReq = client.DeleteAsync(URL).Result;
break;
}
if (WebReq != null && WebReq.StatusCode == HttpStatusCode.OK)
{
WebReq.EnsureSuccessStatusCode();
OnSuccess();
}
else
{
OnFailure();
}
}
}
//use function
Dictionary<string, string> headers = new Dictionary<string, string>();
Dictionary<string, string> cookies = new Dictionary<string, string>();
headers.Add("x-sess-uuid", "0.7f257e68.1720850372.31438db5");
cookies.Add("x-sess-uuid", "0.7f257e68.1720850372.31438db5");
cookies.Add("Path", "/v1/api/iserver/auth");
cookies.Add("Secure", "");
cookies.Add("HttpOnly", "");
var response = sendRestRequest("/iserver/auth/status", MethodType.POST, null, headers, cookies);
//