3

I've a CGI module written in C & for some condition I want to return HTTP error 400 from this module. The problem is - I don't know how to return HTTP error from the module.

Looks like the 'return(-1)' in my module, returns the 500 internal server error. I've tried returning 400 etc. but in vein. I've even tried "printf("Status:400");" before returning -1 (as suggested here: How to return a 500 HTTP status from a C++ CGI program ) but that didn't work.

Any advice on this would be appreciated.

Edit: [solved] I was able to return HTTP error code from the python module (which is called later by this C CGI module). So didn't get to try the suggestion mentioned in comments below. Thanks for offering help, though.

Community
  • 1
  • 1
v.rathor
  • 91
  • 2
  • 6

2 Answers2

8

To return HTTP error 400 to the HTTP client, you have to write the HTTP status line to stdout, like this:

printf("Status: 400 Bad Request\n");

Ref: https://www.rfc-editor.org/rfc/rfc3875

The Status header field contains a 3-digit integer result code that indicates the level of success of the script's attempt to handle the request.

  Status         = "Status:" status-code SP reason-phrase NL
  status-code    = "200" | "302" | "400" | "501" | extension-code
  extension-code = 3digit
  reason-phrase  = *TEXT
Community
  • 1
  • 1
user803422
  • 2,636
  • 2
  • 18
  • 36
  • Thanks. Never get to try that as the problem got solved the other way. Thanks anyways... :) – v.rathor May 24 '13 at 06:00
  • My mistake. I updated my answer. (my previous answer was not CGI compliant, but HTTP compliant suitable for callbacks within HTTP servers like civetweb) – user803422 Jan 03 '18 at 19:52
-1

To return HTTP error code from your CGI script, you have to write it into stdout, such as:

#include <stdio.h>

int main()
{
    printf("status: 400\n\n");

    return 0;
}

Just the status: status-code\n\n is necessary.

16ctt1x
  • 321
  • 6
  • 21