Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to intentionally cause a 400 Bad Request in Python/Flask?

Tags:

A consumer of my REST API says that on occasion I am returning a 400 Bad Request - The request sent by the client was syntactically incorrect. error.

My application (Python/Flask) logs don't seem to be capturing this, and neither do my webserver/Nginx logs.

Edit: I would like to try to cause a 400 bad request in Flask for debugging purposes. How can I do this?

Following James advice, I added something similar to the following:

@app.route('/badrequest400') def bad_request():     return abort(400) 

When I call this, flask returns the following HTML, which doesn't use the "The request sent by the client was syntactically incorrect" line:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <title>400 Bad Request</title> <h1>Bad Request</h1> <p>The browser (or proxy) sent a request that this server could not understand.</p> 

(I'm not sure why it isn't including the <body> tags.

It appears to me that there are different variations of the 400 error message. For example, if I set a cookie to a value of length 50,000 (using Interceptor with Postman), I'll get the following error from Flask instead:

<html> <head>     <title>Bad Request</title> </head> <body>     <h1>         <p>Bad Request</p>     </h1> Error parsing headers: 'limit request headers fields size'  </body> </html> 

Is there a way to get Flask to through the different variations of 400 errors?

like image 932
Matthew Moisen Avatar asked Sep 01 '15 23:09

Matthew Moisen


People also ask

What is 400 Bad Request in REST API?

400 (Bad Request) 400 is the generic client-side error status, used when no other 4xx error code is appropriate. Errors can be like malformed request syntax, invalid request message parameters, or deceptive request routing etc. The client SHOULD NOT repeat the request without modifications.

Is 400 Bad Request Bad?

The HTTP status 400 – bad request indicates that the request sent to the server is invalid or corrupted. Just like other 4xx status codes, a 400 bad request is a client-side issue. It can be caused by malformed request syntax, invalid request message framing, or deceptive request routing.

How does a Flask handle a request?

Flask uses the term context local for this. Flask automatically pushes a request context when handling a request. View functions, error handlers, and other functions that run during a request will have access to the request proxy, which points to the request object for the current request.


2 Answers

you can return the status code as a second parameter of the return, see example below

@app.route('/my400') def my400():     code = 400     msg = 'my message'     return msg, code 
like image 196
John Avatar answered Oct 12 '22 10:10

John


You can use abort to raise an HTTP error by status code.

from flask import abort @app.route('/badrequest400') def bad_request():     abort(400) 
like image 41
James Scholes Avatar answered Oct 12 '22 09:10

James Scholes