2014-09-26 2 views
1

У меня проблема с моим кодом, но это правильно! Но я бы это сделал, когда я вставляю адрес неправильно: например, http://127.0.0.1:27017/this_is_a_try мой сервер ответил мне сообщением «это попытка», а не с «ошибкой 404 не найден». Это так сложно? Спасибо всем, помогите мне.C - Mongoose Library Ответное сообщение

#include <signal.h> 
#include <stdlib.h> 
#include "mongoose.h" 
static int s_received_signal = 0; 
static struct mg_server *s_server = NULL; 
static const char *s_remote_addr = "glosbe.com:80"; 
static void signal_handler(int sig_num) { 
    signal(sig_num, signal_handler); 
    s_received_signal = sig_num; 
} 
static int ev_handler(struct mg_connection *conn, enum mg_event ev) { 
    struct mg_connection *client, *orig; 
    switch (ev) { 
    case MG_AUTH: 
     return MG_TRUE; 
    case MG_CONNECT: 
// Send request to the remote host. 
// TODO(lsm): handle connect error here. 
     mg_printf(conn, "GET %s HTTP/1.0\r\nHost: %s\r\n\r\n", 
       "/gapi/translate?from=eng&dest=fra&format=json&phrase=cat", 
       s_remote_addr); 
     return MG_TRUE; 
    case MG_REPLY: 
// Send reply to the original connection 
     orig = (struct mg_connection *) conn->connection_param; 
     mg_send_header(orig, "Content-Type", "text/plain"); 
     mg_send_data(orig, conn->content, conn->content_len); 
     mg_send_data(orig, "", 0); // Last chunk: mark the end of reply 
// Disconnect connections 
     orig->connection_param = NULL; 
     conn->connection_param = NULL; 
     return MG_TRUE; 
    case MG_REQUEST: 
     if ((client = mg_connect(s_server, s_remote_addr)) != NULL) { 
// Interconnect requests 
      client->connection_param = conn; 
      conn->connection_param = client; 
      return MG_MORE; 
     } else { 
      mg_printf_data(conn, "%s", "cannot send API request"); 
      return MG_TRUE; 
     } 
    default: 
     return MG_FALSE; 
    } 
} 
int main(void) { 
    s_server = mg_create_server(NULL, ev_handler); 
    mg_set_option(s_server, "listening_port", "27017"); 
// Setup signal handlers 
    signal(SIGTERM, signal_handler); 
    signal(SIGINT, signal_handler); 
    printf("Listening on port %s\n", mg_get_option(s_server, "listening_port")); 
    while (s_received_signal == 0) { 
     mg_poll_server(s_server, 1000); 
    } 
    mg_destroy_server(&s_server); 
    printf("Existing on signal %d\n", s_received_signal); 
    return EXIT_SUCCESS; 
} 

ответ

0

Ваши коды, кажется, очень близко к мангуст http_client.c образца.

В любом случае, прочитав код мангуста, похоже, что код ответа http заполняет поле uri.
В mongoose.c parse_http_message запросе процесса HTTP и отвечать следующим кодом:

ri->request_method = skip(&buf, " "); 
    ri->uri = skip(&buf, " "); 
    ri->http_version = skip(&buf, "\r\n"); 

Затем дать Oportunity с помощью:

mg_send_status(orig, atoi(conn->uri)); // uri contains status response 

Тогда ответ код будет становится чем-то вроде:

case MG_REPLY: 
    orig = (struct mg_connection *) conn->connection_param; 
    mg_send_status(orig, atoi(conn->uri)); // uri contains status of the http response 
    mg_send_header(orig, "Content-Type", "text/plain"); 
    mg_send_data(orig, conn->content, conn->content_len); 
    mg_send_data(orig, "", 0); // Last chunk: mark the end of reply 
    orig->connection_param = NULL; 
    conn->connection_param = NULL; 
    return MG_TRUE; 

EDIT Поскольку t его commit можно более четко получить доступ к http-ответному коду ответа:

mg_send_status(orig, conn->status_code); 
Смежные вопросы