Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MC60 HTTP GET请求问题_Http_Server_Gsm_Quectel - Fatal编程技术网

MC60 HTTP GET请求问题

MC60 HTTP GET请求问题,http,server,gsm,quectel,Http,Server,Gsm,Quectel,我正在使用MC60ca模块, 我想使用web套接字,以便从服务器进行握手时,必须发送HTTP GET请求。请求的形式如下: “获取HTTP/1.1\r\nHost:echo.websocket.org:80\r\nUpgrade:websocket\r\n连接:升级\r\nSec websocket版本:13\r\nSec websocket密钥:Gsr/P3vIWH+j2U5Rmt0Bkw==\r\n\0” 我尝试使用sdk1.6的HTTP示例发送它,但我得到了cme错误3810和3811 我

我正在使用MC60ca模块,
我想使用web套接字,以便从服务器进行握手时,必须发送HTTP GET请求。请求的形式如下:

“获取HTTP/1.1\r\nHost:echo.websocket.org:80\r\nUpgrade:websocket\r\n连接:升级\r\nSec websocket版本:13\r\nSec websocket密钥:Gsr/P3vIWH+j2U5Rmt0Bkw==\r\n\0”

我尝试使用sdk1.6的
HTTP示例
发送它,但我得到了cme错误3810和3811
我还在+QHTTPCFG=“requestheader”,1\0中完成了
requestheader=1

如何解决此请求错误

代码附在下面

#ifdef EXAMPLE_HTTP
#include “custom_feature_def.h”
#include “ql_type.h”
#include “ql_stdlib.h”
#include “ql_trace.h”
#include “ql_timer.h”
#include “ql_uart.h”
#include “ql_error.h”
#include “ql_gprs.h”
#include “ql_fs.h”
#include “ril.h”
#include “ril_network.h”
#include “ril_http.h”

#define DEBUG_ENABLE 1
#if DEBUG_ENABLE > 0
#define DEBUG_PORT UART_PORT1
#define DBG_BUF_LEN 512
static char DBG_BUFFER[DBG_BUF_LEN];
#define APP_DEBUG(FORMAT,…) {
Ql_memset(DBG_BUFFER, 0, DBG_BUF_LEN);
Ql_sprintf(DBG_BUFFER,FORMAT,##VA_ARGS);
if (UART_PORT2 == (DEBUG_PORT))
{
Ql_Debug_Trace(DBG_BUFFER);
} else {
Ql_UART_Write((Enum_SerialPort)(DEBUG_PORT), (u8*)(DBG_BUFFER), Ql_strlen((const char *)(DBG_BUFFER)));
}
}
#else
#define APP_DEBUG(FORMAT,…)
#endif

/****************************************************************************

Define http parameters
****************************************************************************/
#define APN_NAME “CMNET\0”
#define APN_USERID “”
#define APN_PASSWD “”
#define HTTP_REQUEST 0 // 0=http-get, 1=http-post, 2=http-file

//
// http url address
//
#if (HTTP_REQUEST == 0)
// url for http-get
#define HTTP_URL_ADDR “GET HTTP/1.1\r\nHost: echo.websocket.org:80\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Key: Gsr/P3vIWH+j2U5Rmt0Bkw==\r\n\0”
//#define HTTP_URL_ADDR “GET /2016/04/create-xml-request-in-c-for-server.html HTTP/1.1\r\nHost: www.aticleworld.com\r\nContent-Type: text/plain\r\n\r\n\0”
//#define HTTP_URL_ADDR "GET /demo/AC001/AC001(6).txt HTTP/1.1\r\nHost: techxinnovations.in\r\nConnection: Keep-alive\r\nAccept: /\r\n\r\n "
#elif (HTTP_REQUEST == 1)
// url for http-post
//#define HTTP_URL_ADDR “https://www.google.com\0”
#define HTTP_URL_ADDR “http://echo.websocket.org\0”
//#define HTTP_URL_ADDR “http://www.quectel.com/\0”
#elif (HTTP_REQUEST == 2)
// url for http-file
#define HTTP_URL_ADDR “http://124.74.41.170:5015/index.html\0”
#endif

// for http-post (HTTP_REQUEST=1)
//#define HTTP_POST_MSG “GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n\0”
#define HTTP_POST_MSG “GET HTTP/1.1\r\nHost: echo.websocket.org:80\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Key: Gsr/P3vIWH+j2U5Rmt0Bkw==\r\n\0”
// for downloading file via http (HTTP_REQUEST=2)
#define RAM_FILE_NAME “RAM:http.file\0”
#define RAM_FILE_SIZE 4096

u8 arrHttpRcvBuf[101024]; // 10K buffer for http data
static void HTTP_Program(u8 get_post);
static void Callback_HTTP_DwnldFile(u32 dllSize, u32 cntntLen, s32 errCode);
static void Callback_UART_Hdlr(Enum_SerialPort port, Enum_UARTEventType msg, bool level, void customizedPara);
static void SIM_Card_State_Ind(u32 sim_stat);

void proc_main_task(s32 taskId)
{
ST_MSG msg;

// Register & open UART port
Ql_UART_Register(UART_PORT1, Callback_UART_Hdlr, NULL);
Ql_UART_Open(UART_PORT1, 115200, FC_NONE);

Ql_UART_Register(UART_PORT2, Callback_UART_Hdlr, NULL);
Ql_UART_Open(UART_PORT2, 115200, FC_NONE);

APP_DEBUG("\r\nOpenCPU: example for HTTP programming\r\n");
while (1)
{
    Ql_OS_GetMessage(&msg);
    switch(msg.message)
    {
        case MSG_ID_RIL_READY:
            APP_DEBUG("<-- RIL is ready -->\r\n");
            Ql_RIL_Initialize();
        case MSG_ID_URC_INDICATION:
            switch (msg.param1)
            {
            case URC_SYS_INIT_STATE_IND:
                APP_DEBUG("<-- Sys Init Status %d -->\r\n", msg.param2);
                break;
            case URC_CFUN_STATE_IND:
                APP_DEBUG("<-- CFUN Status:%d -->\r\n", msg.param2);
                break;
            case URC_SIM_CARD_STATE_IND:
                SIM_Card_State_Ind(msg.param2);
                break;
            case URC_GSM_NW_STATE_IND:
                APP_DEBUG("<-- GSM Network Status:%d -->\r\n", msg.param2);
                break;
            case URC_GPRS_NW_STATE_IND:
                APP_DEBUG("<-- GPRS Network Status:%d -->\r\n", msg.param2);
                if (NW_STAT_REGISTERED == msg.param2 || NW_STAT_REGISTERED_ROAMING == msg.param2)
                {
                    // GPRS is ready.
                    // Now, you can start to program http
                    if (0 == HTTP_REQUEST)
                    {// HTTP-get
                        HTTP_Program(0);
                    }
                    else if (1 == HTTP_REQUEST)
                    {// HTTP-post
                        HTTP_Program(1);
                    }
                    else if (2 == HTTP_REQUEST)
                    {// HTTP downlaod file
                        HTTP_Program(2);
                    }
                }
                break;
            }
            break;
        default:
            break;
    }
}
}

static void SIM_Card_State_Ind(u32 sim_stat)
{
switch (sim_stat)
{
case SIM_STAT_NOT_INSERTED:
APP_DEBUG("<-- SIM Card Status: NOT INSERTED -->\r\n");
break;
case SIM_STAT_READY:
APP_DEBUG("<-- SIM Card Status: READY -->\r\n");
break;
case SIM_STAT_PIN_REQ:
APP_DEBUG("<-- SIM Card Status: SIM PIN -->\r\n");
break;
case SIM_STAT_PUK_REQ:
APP_DEBUG("<-- SIM Card Status: SIM PUK -->\r\n");
break;
case SIM_STAT_PH_PIN_REQ:
APP_DEBUG("<-- SIM Card Status: PH-SIM PIN -->\r\n");
break;
case SIM_STAT_PH_PUK_REQ:
APP_DEBUG("<-- SIM Card Status: PH-SIM PUK -->\r\n");
break;
case SIM_STAT_PIN2_REQ:
APP_DEBUG("<-- SIM Card Status: SIM PIN2 -->\r\n");
break;
case SIM_STAT_PUK2_REQ:
APP_DEBUG("<-- SIM Card Status: SIM PUK2 -->\r\n");
break;
case SIM_STAT_BUSY:
APP_DEBUG("<-- SIM Card Status: BUSY -->\r\n");
break;
case SIM_STAT_NOT_READY:
APP_DEBUG("<-- SIM Card Status: NOT READY -->\r\n");
break;
default:
APP_DEBUG("<-- SIM Card Status: ERROR -->\r\n");
break;
}
}
s32 RIL_HTTP_SETCONTENT(u16 len)
{
    s32  retRes;
    s32  errCode = RIL_AT_FAILED;
    char strAT[30];


    Ql_sprintf(strAT, "AT+QHTTPCFG=\"contextid\",%d\0", len);
    retRes = Ql_RIL_SendATCmd(strAT, Ql_strlen(strAT), ATRsp_QHTTP_Handler, &errCode, 0);
    if (retRes != RIL_AT_SUCCESS)
    {
        if (RIL_AT_FAILED == errCode)
        {
            return retRes;
        } else {
            return errCode;
        }
    }



    Ql_sprintf(strAT, "AT+QHTTPCFG=\"requestheader\",%d\0", len);
        retRes = Ql_RIL_SendATCmd(strAT, Ql_strlen(strAT), ATRsp_QHTTP_Handler, &errCode, 0);
        if (retRes != RIL_AT_SUCCESS)
        {
            if (RIL_AT_FAILED == errCode)
            {
                return retRes;
            } else {
                return errCode;
            }
        }


    Ql_sprintf(strAT, "AT+QHTTPCFG=\"responseheader\",%d\0", len);
            retRes = Ql_RIL_SendATCmd(strAT, Ql_strlen(strAT), ATRsp_QHTTP_Handler, &errCode, 0);
            if (retRes != RIL_AT_SUCCESS)
            {
                if (RIL_AT_FAILED == errCode)
                {
                    return retRes;
                } else {
                    return errCode;
                }
            }

    return retRes;
}
static u32 m_rcvDataLen = 0;
static void HTTP_RcvData(u8* ptrData, u32 dataLen, void* reserved)
{
APP_DEBUG("<-- Data coming on http, total len:%d -->\r\n", m_rcvDataLen + dataLen);
if ((m_rcvDataLen + dataLen) <= sizeof(arrHttpRcvBuf))
{
Ql_memcpy((void*)(arrHttpRcvBuf + m_rcvDataLen), (const void*)ptrData, dataLen);
} else {
if (m_rcvDataLen < sizeof(arrHttpRcvBuf))
{// buffer is not enough
u32 realAcceptLen = sizeof(arrHttpRcvBuf) - m_rcvDataLen;
Ql_memcpy((void*)(arrHttpRcvBuf + m_rcvDataLen), (const void*)ptrData, realAcceptLen);
APP_DEBUG("<-- Rcv-buffer is not enough, discard part of data (len:%d/%d) -->\r\n", dataLen - realAcceptLen, dataLen);
} else {// No more buffer
APP_DEBUG("<-- No more buffer, discard data (len:%d) -->\r\n", dataLen);
}
}
m_rcvDataLen += dataLen;
}

static void HTTP_Program(u8 http_action)
{
s32 ret;
//u32 readDataLen = 0;

// 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, APN_NAME, APN_USERID, APN_PASSWD);
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);
ret=RIL_HTTP_SETCONTENT(1);                                                 //AT+QHTTPCFG=\"requestheader\",1\0
APP_DEBUG("<-- RIL_HTTP_SETCONTENT, ret=%d -->\r\n", ret);
// Set HTTP server address (URL)
ret = RIL_HTTP_SetServerURL(HTTP_URL_ADDR, Ql_strlen(HTTP_URL_ADDR));
APP_DEBUG("<-- Set http server URL, ret=%d -->\r\n", ret);

// Send get/post request
m_rcvDataLen = 0;
if (0 == http_action)
{
    // get-request
    APP_DEBUG("BEFORE GET REQUET\r\n");
    ret = RIL_HTTP_RequestToGet(100);   // 100s timetout
    APP_DEBUG("<-- Send get-request, ret=%d -->\r\n", 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);
}
else if (1 == http_action)
{
    // post-request
    APP_DEBUG("BEFORE GET IN POST REQUET\r\n");
    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);
}
else if (2 == http_action){
    // get-request
    ret = RIL_HTTP_RequestToGet(100);   // 100s timetout
    APP_DEBUG("<-- Send get-request, ret=%d -->\r\n", ret);

    // Download file from http server
    ret = RIL_HTTP_DownloadFile(RAM_FILE_NAME, RAM_FILE_SIZE, Callback_HTTP_DwnldFile);
    APP_DEBUG("<-- Download file from http server, ret=%d -->\r\n", ret);
}

// Close PDP context
ret = RIL_NW_ClosePDPContext();
APP_DEBUG("<-- Close PDP context, ret=%d -->\r\n", ret);
}

static void Callback_HTTP_DwnldFile(u32 dllSize, u32 cntntLen, s32 errCode)
{
s32 iRet;
APP_DEBUG("<-- Finished to download file from http server, dllSize=%d, cntntLen=%d, errCode=%d -->\r\n", dllSize, cntntLen, errCode);
iRet = Ql_FS_GetSize((char*)RAM_FILE_NAME);
APP_DEBUG("<-- Check RAM file:%s, size:%d -->\r\n", (char*)RAM_FILE_NAME, iRet);
}

static void Callback_UART_Hdlr(Enum_SerialPort port, Enum_UARTEventType msg, bool level, void* customizedPara)
{
APP_DEBUG(“Callback_UART_Hdlr: port=%d, event=%d, level=%d, p=%x\r\n”, port, msg, level, customizedPara);
}

#endif //EXAMPLE_FTP
\ifdef示例\u HTTP
#包括“自定义_功能_def.h”
#包括“ql_type.h”
#包括“ql_stdlib.h”
#包括“ql_trace.h”
#包括“ql_timer.h”
#包括“ql_uart.h”
#包括“ql_error.h”
#包括“ql_gprs.h”
#包括“ql_fs.h”
#包括“ril.h”
#包括“ril_network.h”
#包括“ril_http.h”
#定义调试\u启用1
#如果调试\u启用>0
#定义调试端口UART端口1
#定义DBG_BUF_LEN 512
静态字符DBG_缓冲区[DBG_BUF_LEN];
#定义应用程序调试(格式,…){
Ql_memset(DBG_缓冲区,0,DBG_BUF_LEN);
Ql#u sprintf(DBG#u缓冲区,格式,##VA#u参数);
如果(UART_端口2==(调试_端口))
{
Ql_调试_跟踪(DBG_缓冲区);
}否则{
Ql_UART_Write((Enum_SerialPort)(DEBUG_PORT),(u8*)(DBG_BUFFER),Ql_strlen((const char*)(DBG_BUFFER));
}
}
#否则
#定义应用程序调试(格式,…)
#恩迪夫
/****************************************************************************
定义http参数
****************************************************************************/
#定义APN_名称“CMNET\0”
#定义APN_用户ID“”
#定义APN_PASSWD“”
#定义HTTP_请求0//0=HTTP get,1=HTTP post,2=HTTP文件
//
//http url地址
//
#如果(HTTP_请求==0)
//http get的url
#定义HTTP\u URL\u ADDR“获取HTTP/1.1\r\n主机:echo.websocket.org:80\r\n升级:websocket\r\n连接:升级\r\nSec websocket版本:13\r\nSec websocket键:Gsr/P3vIWH+j2U5Rmt0Bkw=\r\n\0”
//#定义HTTP\u URL\u ADDR“GET/2016/04/create-xml-request-in-c-for-server.html HTTP/1.1\r\n主机:www.aticleworld.com\r\n内容类型:text/plain\r\n\r\n\0”
//#定义HTTP\u URL\u ADDR“GET/demo/AC001/AC001(6).txt HTTP/1.1\r\n主机:techxinovations.in\r\n连接:保持活动\r\n概念:/\r\n\r\n”
#elif(HTTP_请求==1)
//http post的url
//#定义HTTP\u URL\u ADDR“https://www.google.com\0”
#定义HTTP\u URL\u ADDR“http://echo.websocket.org\0”
//#定义HTTP\u URL\u ADDR“http://www.quectel.com/\0”
#elif(HTTP_请求==2)
//http文件的url
#定义HTTP\u URL\u ADDR“http://124.74.41.170:5015/index.html\0”
#恩迪夫
//对于http post(http_请求=1)
//#定义HTTP\u POST\u MSG“GET/HTTP/1.1\r\nHost:www.google.com\r\n\r\n\0”
#定义HTTP\u POST\u MSG“获取HTTP/1.1\r\n主机:echo.websocket.org:80\r\n升级:websocket\r\n连接:升级\r\nSec websocket版本:13\r\nSec websocket键:Gsr/P3vIWH+j2U5Rmt0Bkw=\r\n\0”
//用于通过http下载文件(http_请求=2)
#定义RAM\u文件\u名称“RAM:http.FILE\0”
#定义内存文件大小4096
u8 arrhttpcvbuf[101024];//用于http数据的10K缓冲区
静态无效HTTP_程序(u8 get_post);
静态无效回调文件(u32 dllSize、u32 cntntLen、s32 errCode);
静态无效回调\u UART\u Hdlr(枚举串行端口,枚举UARTEventType msg,bool级别,void customizedPara);
静态无效SIM卡状态标识(u32 SIM卡状态);
无效进程主任务(s32任务ID)
{
味精;
//注册并打开UART端口
Ql_UART_寄存器(UART_端口1,回调_UART_Hdlr,NULL);
Ql_UART_打开(UART_端口115200,FC_无);
Ql_UART_寄存器(UART_端口2,回调_UART_Hdlr,NULL);
Ql_UART_打开(UART_端口2、115200、FC_无);
APP_DEBUG(“\r\nOpenPU:HTTP编程示例\r\n”);
而(1)
{
Ql_OS_GetMessage(&msg);
开关(消息)
{
案例消息\u ID\u RIL\u就绪:
应用程序调试(“\r\n”);
Ql_RIL_Initialize();
案例消息\u ID\u URC\u指示:
开关(消息参数1)
{
案例资源系统初始状态标识:
应用程序调试(“\r\n”,msg.param2);
打破
案例URC\u CFUN\u STATE\u IND:
应用程序调试(“\r\n”,msg.param2);
打破
案例URC SIM卡状态标识:
SIM卡状态标识(消息参数2);
打破
案例URC\u GSM\u NW\u州工业:
应用程序调试(“\r\n”,msg.param2);
打破
案例URC\u GPRS\u NW\u州工业:
应用程序调试(“\r\n”,msg.param2);
if(NW_STAT_registed==msg.param2 | | NW_STAT_registed_ROAMING==msg.param2)
{
//GPRS已准备就绪。
//现在,您可以开始编写http
如果(0==HTTP\U请求)
{//httpget
HTTP_程序(0);
}
else if(1==HTTP\U请求)
{//HTTP-post
HTTP_计划(1);
}
else if(2==HTTP\U请求)
{//HTTP下载文件
HTTP_程序(2);
}
}
打破
}
打破
违约:
打破
}
}
}
静态无效SIM卡状态标识(u32 SIM卡状态)
{
开关(sim_stat)
{
案例模拟统计未插入:
应用程序调试(“\r\n”);
打破
案例模拟统计就绪:
应用程序调试(“\r\n”);
打破
机箱模拟统计引脚要求:
应用程序调试(“\r\n”);
打破
案例模拟统计要求:
应用程序调试(“\r\n”);
打破
案例模拟统计PHU引脚要求:
应用程序调试(“\r\n”);
打破
案例模拟统计数据要求:
应用程序调试(“\r\n”);
打破
案例模拟统计PIN2要求:
应用程序调试(“\r\n”);
打破
案例模拟统计数据要求:
应用程序调试(“\r\n”);
打破
案例模拟统计忙:
应用程序调试(“\r\n”);
打破
案例模拟统计未就绪:
应用程序调试(“\r\n”);
打破
违约:
应用程序调试(“\r\n”);
打破
}
}
s32 RIL_HTTP_设置内容(u16 len)
{
s32网;
s32错误码=