با سلام.
برای پیاده سازی سناریو مد نظرم لازم دارم که یک API در سمت سرور را فراخوانی کنم. بدین منظور لازم است دادهای را با فرمت json به سمت سرور بفرستم. این دیتا IMEI دستگاه میباشد که از طریق AT command بدست میآید. در ادامه از sdk ورژن 1.8 استفاده کردم و از توابع مربوط به مثال http برای پیاده سازی این سناریو بهره بردم.
Ql_sprintf(HTTP_POST_MSG,"Message={\"IMEI\":\"%s\"}\0",IMEI);
APP_DEBUG("%s\r\n",HTTP_POST_MSG);
// // Set PDP context
ret = RIL_NW_SetGPRSContext(Ql_GPRS_GetPDPContextId());
APP_DEBUG("<-- Set GPRS PDP context, ret=%d -->\r\n", ret);
// Set APN
ret = RIL_NW_SetAPN(1, m_GprsConfig.apnName, m_GprsConfig.apnUserId, m_GprsConfig.apnPasswd);
APP_DEBUG("<-- Set GPRS APN, ret=%d -->\r\n", ret);
// Open/Activate PDP context
ret = RIL_NW_OpenPDPContext();
APP_DEBUG("<-- Open PDP context, ret=%d -->\r\n", ret);
// Set HTTP server address (URL)
char HTTP_POST_URL_ADDR[250] = "https://tttt-ttttt.tttttt.com/devices/init";
ret = RIL_HTTP_SetServerURL(HTTP_POST_URL_ADDR, Ql_strlen(HTTP_POST_URL_ADDR));
APP_DEBUG("<-- Set http server URL, ret=%d -->\r\n", ret);
// Send post request
m_rcvDataLen = 0;
ret = RIL_HTTP_RequestToPost(HTTP_POST_MSG, Ql_strlen((char*)HTTP_POST_MSG));
APP_DEBUG("<-- Send post-request, postMsg=%s, ret=%d -->\r\n", (char*)HTTP_POST_MSG, ret);
// Read response from server
ret = RIL_HTTP_ReadResponse(120, HTTP_RcvData);
APP_DEBUG("<-- Read http response data, ret=%d, dataLen=%d -->\r\n", ret, m_rcvDataLen);
ret = RIL_NW_ClosePDPContext();
APP_DEBUG("<-- Close PDP context, ret=%d -->\r\n", ret);
اما متاسفانه به نتیجهای نرسیدم. از صحت آدرس url و کال شدن صحیح API مدنظر مطمئن هستم. اگر کسی میتونه من رو در این زمینه راهنمایی بکنه ممنون میشم.
سلام
با دستورات http داری سعی میکنی به یه دامنه https وصل بشی و این شدنی نیست.
یا باید دامنه رو http کنی و ازدستورات http استفاده کنی
یا باید دامنه رو https کنی و ازدستورات https استفاده کنی
وصل شدن به http خیلی راحته
اما برای وصل شدن به https باید cipher suitهای ssl که روی سرور نصب شده از cyphersuitهای ماژول پشتیبانی کنه
اگر نمیکنه باید خودت نصبشون کنی اگرم ازssl رایگان استفاده کنی که باید با پشتیبانی سرور تماس بگیری و بخوای تغییر بدن که معمولا نمیدن و باید خودت ssl بخری
2 پسندیده
خیلی ممنون از راهنمایی خوبتون. من سرور رو عوض کردم و از سرور http استفاده میکنم. از صحت عملکرد سرور مطمئن هستم دیتا با فرمت JSON برای سرور post میکنم و جواب مطلوب را دریافت میکنم این تست را با نرم افزار psot man انجام داده ام.
ولی وقتی در کد خودم آدرس url جدید رو اضافه میکنم ماژول همچنان پاسخ درستی نمیده و با خطای ret = -1 مواجه میشوم. همچنین در سایت سیسوگ یک نمونه کد اگزمپل از پست کردن دیتای gps وجود دارد من کد خودم رو با سایت چک کردم و دیدم روند مشابه هستش ولی متاسفانه نتونستم جوابی بگیرم. ممنون میشم راهنمایی کنید که چطور میتونم ایراد کار را پیدا کنم.
تغییر به http دادی آیا آدرس سایت رو هم داخل دستورات ارسالی به ماژول به http تغییر دادی؟
کد کامل ارسالی به ماژول رو بزرا ببنیم مثل سوال اول که کد های ارسالی رو کامل گذاشتی
با سلام
من روند زیر را برای پست کردن دیتا طی میکنم:
Ql_sprintf(HTTP_POST_MSG,"POST /devices/init HTTP/1.1\r\nHost: myURL.com\r\nAccept: / \r\nContent-Length: 26\r\nContent-Type: application/json\r\n\r\n{\"IMEI\":\"%s\"}\0",IMEI);
ret = RIL_NW_SetGPRSContext(Ql_GPRS_GetPDPContextId());
APP_DEBUG("<-- Set GPRS PDP context, ret=%d -->\r\n", ret);
// Set APN
ret = RIL_NW_SetAPN(1, m_GprsConfig.apnName, m_GprsConfig.apnUserId, m_GprsConfig.apnPasswd);
APP_DEBUG("<-- Set GPRS APN, ret=%d -->\r\n", ret);
// Open/Activate PDP context
ret = RIL_NW_OpenPDPContext();
APP_DEBUG("<-- Open PDP context, ret=%d -->\r\n", ret);
char HTTP_POST_URL_ADDR[250] = "http://myURL.com:31064/devices/init";
ret = RIL_HTTP_SetServerURL(HTTP_POST_URL_ADDR, Ql_strlen(HTTP_POST_URL_ADDR));
APP_DEBUG("<-- Set http server URL, ret=%d -->\r\n", ret);
// Send post request
m_rcvDataLen = 0;
ret = RIL_HTTP_RequestToPost(HTTP_POST_MSG, Ql_strlen((char*)HTTP_POST_MSG));
APP_DEBUG("<-- Send post-request, postMsg=%s, ret=%d -->\r\n", (char*)HTTP_POST_MSG, ret);
// Read response from server
ret = RIL_HTTP_ReadResponse(120, HTTP_RcvData);
APP_DEBUG("<-- Read http response data, ret=%d, dataLen=%d -->\r\n", ret, m_rcvDataLen);
ret = RIL_NW_ClosePDPContext();
APP_DEBUG("<-- Close PDP context, ret=%d -->\r\n", ret);
مشکلی که هست در هدر ارسالی content-type رو برابر با application/json قرار میدم ولی در سمت سرور هدر دریافتی به صورت form هستش که باعث ارور از سمت سرور میشود. میخواستم بپرسم این مشکل را چطور میتونم حل بکنم.
الان سروری گه باهاش کار میکنم نیز http هستش.