I need a live test server that accepts my requests for basic information via HTTP GET and also allows me to POST (even if it's really not doing anything). This is entirely for test purposes.

A good example is here. It easily accepts GET requests, but I need one that accepts POST requests as well.

Does anyone know of a server that I can send dummy test messages too?

1

19 Answers

It echoes the data used in your request for any of these types:

  • Returns most of the below.
  • Returns Origin IP.
  • Returns user-agent.
  • Returns header dict.
  • Returns GET data.
  • Returns POST data.
  • Returns PUT data.
  • Returns DELETE data
  • Returns gzip-encoded data.
  • Returns given HTTP Status code.
  • Returns given response headers.
  • 302 Redirects n times.
  • 302 Relative redirects n times.
  • Returns cookie data.
  • Sets a simple cookie.
  • Challenges HTTPBasic Auth.
  • 404'd BasicAuth.
  • Challenges HTTP Digest Auth.
  • Streams n–100 lines.
  • Delays responding for n–10 seconds.
7

There is

"Here you will find a server which receives any POST you wish to give it and stores the contents for you to review."

6

Webhook Tester is a great tool: (GitHub)

enter image description here

Important for me, it showed the IP of the requester, which is helpful when you need to whitelist an IP address but aren't sure what it is.

1

was similar to the already mentioned tools and also had a very nice UI.

RequestBin gives you a URL that will collect requests made to it and let you inspect them in a human-friendly way. Use RequestBin to see what your HTTP client is sending or to inspect and debug webhook requests.

Though it has been discontinued as of Mar 21, 2018.

We have discontinued the publicly hosted version of RequestBin due to ongoing abuse that made it very difficult to keep the site up reliably. Please see instructions for setting up your own self-hosted instance.

3

If you want a local test server that accepts any URL and just dumps the request to the console, you can use node:

const http = require("http"); const hostname = "0.0.0.0"; const port = 3000; const server = http.createServer((req, res) => { console.log(`\n${req.method} ${req.url}`); console.log(req.headers); req.on("data", function(chunk) { console.log("BODY: " + chunk); }); res.statusCode = 200; res.setHeader("Content-Type", "text/plain"); res.end("Hello World\n"); }); server.listen(port, hostname, () => { console.log(`Server running at ); }); 

Save it in a file 'echo.js' and run it as follows:

$ node echo.js Server running at 

You can then submit data:

$ curl -d "[1,2,3]" -XPOST 

which will be shown in the server's stdout:

POST /foo/bar { host: 'localhost:3000', 'user-agent': 'curl/7.54.1', accept: '*/*', 'content-length': '7', 'content-type': 'application/x-www-form-urlencoded' } BODY: [1,2,3] 
0

nc one-liner local test server

Setup a local test server in one line under Linux:

nc -kdl localhost 8000 

Sample request maker on another shell:

wget 

then on the first shell you see the request showed up:

GET / HTTP/1.1 User-Agent: Wget/1.19.4 (linux-gnu) Accept: */* Accept-Encoding: identity Host: localhost:8000 Connection: Keep-Alive 

nc from the netcat-openbsd package is widely available and pre-installed on Ubuntu.

Tested on Ubuntu 18.04.

2

Have a look at PutsReq, it's similar to the others, but it also allows you to write the responses you want using JavaScript.

1

Here is one Postman echo:

example:

curl --request POST \ --url \ --data 'This is expected to be sent back as part of response body.' 

response:

{"args":{},"data":"","files":{},"form":{"This is expected to be sent back as part of response body.":""},"headers":{"host":"postman-echo.com","content-length":"58","accept":"*/*","content-type":"application/x-www-form-urlencoded","user-agent":"curl/7.54.0","x-forwarded-port":"443","x-forwarded-proto":"https"},"json":{"... 

You can run the actual Ken Reitz's httpbin server locally (under docker or on bare metal):

Run dockerized

docker pull kennethreitz/httpbin docker run -p 80:80 kennethreitz/httpbin 

Run directly on your machine

## install dependencies pip3 install gunicorn decorator httpbin werkzeug Flask flasgger brotlipy gevent meinheld six pyyaml ## start the server gunicorn -b 0.0.0.0:8000 httpbin:app -k gevent 

Now you have your personal httpbin instance running on (visible to all of your LAN)

Minimal Flask REST server

I wanted a server which returns predefined responses so I found that in this case it's simpler to use a minimal Flask app:

#!/usr/bin/env python3 # Install dependencies: # pip3 install flask import json from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def root(): # spit back whatever was posted + the full env return jsonify( { 'request.json': request.json, 'request.values': request.values, 'env': json.loads(json.dumps(request.__dict__, sort_keys=True, default=str)) } ) @app.route('/post', methods=['GET', 'POST']) def post(): if not request.json: return 'No JSON payload! Expecting POST!' # return the literal POST-ed payload return jsonify( { 'payload': request.json, } ) @app.route('/users/<gid>', methods=['GET', 'POST']) def users(gid): # return a JSON list of users in a group return jsonify([{'user_id': i,'group_id': gid } for i in range(42)]) @app.route('/healthcheck', methods=['GET']) def healthcheck(): # return some JSON return jsonify({'key': 'healthcheck', 'status': 200}) if __name__ == "__main__": with app.test_request_context(): app.debug = True app.run(debug=True, host='0.0.0.0', port=8000) 
1

. It has nice feature of getting endpoints without login (24h temporary account)

2

Create choose a free web host and put the following code

<h1>Request Headers</h1> <?php $headers = apache_request_headers(); foreach ($headers as $header => $value) { echo "<b>$header:</b> $value <br />\n"; } ?> 
1

I have created an open-source hackable local testing server that you can get running in minutes. You can create new API's, define your own response and hack it in any ways you wish to.

Github Link :

I don't konw why all of the answers here make a very simple work very hard!

When there is a request on HTTP, actually a client will send a HTTP_MESSAGE to server (read about what is HTTP_MESSAGE) and you can make a server in just 2 simple steps:

  1. Install netcat:

    In many unix-based systems you have this already installed and if you have windows just google it , the installation process is really simple, you just need a nc.exe file and then you should copy the path of this nc.exe file to your path environment variable and check if every think is OK with nc -h

  2. Make a server which is listening on localhost:12345:

    just type nc -l -p 12345 on your terminal and everything is done! (in mac nc -l 12345 tnx Silvio Biasiol)


Now you have a server which is listening on make a post request with:

axios.post(' { firstName: 'Fred' }) 

If you are a js developer or make your own xhr or make a form in a HTML file and submit it to server, sth. like:

<form action="" method="post"> 

or make a request with curl or wget or etc. Then check your terminal, a raw HTTP_MESSAGE should be appear on your terminal and you can start your happy hacking ;)

1

You might don't need any web site for that, only open up the browser, press F12 to get access to developer tools > console, then in console write some JavaScript Code to do that.

Here I share some ways to accomplish that:

For GET request: *.Using jQuery:

$.get("", function(data, status){ console.log(data, status); }); 

For POST request:

  1. Using jQuery $.ajax:
var url= "", api_key = "6136-bc16-49fb-bacb-802358", token1 = "Just for test", result; $.ajax({ url: url, type: "POST", data: { api_key: api_key, token1: token1 }, }).done(function(result) { console.log("done successfuly", result); }).fail(function(error) { console.log(error.responseText, error); }); 
  1. Using jQuery, append and submit
var merchantId = "AA86E", token = "4107120133142729", url = ""; var form = `<form method="post" action="${url}"> <input type="hidden" name="token" value="${merchantId}"/> <input name="merchantId" type="hidden" value="${token}"/> <button type="submit" >Pay</button> </div> </form> `; $('body').append(form); $("#send-by-post").submit();//Or $(form).appendTo("body").submit(); 
  1. Using Pure JavaScript:
`var api_key = "73736-bc16-49fb-bacb-643e58", recipient = "095552565", token1 = "4458", url = ' ``var form = `<form method="post" action="${url}"> <input type="hidden" name="api_key" value="${api_key}"/> <input type="hidden" name="recipient" value="${recipient}"/> <input name="token1" type="hidden" value="${token1}"/> <button type="submit" >Send</button> </div> </form>`;`` document.querySelector("body").insertAdjacentHTML('beforeend',form); document.querySelector("#send-by-post").submit(); 
  1. Or even using ASP.Net:
var url = ""; Response.Clear(); var sb = new System.Text.StringBuilder(); sb.Append("<html>"); sb.AppendFormat("<body onload='document.forms[0].submit()'>"); sb.AppendFormat("<form action='{0}' method='post'>", url); sb.AppendFormat("<input type='hidden' name='merchantId' value='{0}'>", "C668"); sb.AppendFormat("<input type='hidden' name='Token' value='{0}'>", "22720281459"); sb.Append("</form>"); sb.Append("</body>"); sb.Append("</html>"); Response.Write(sb.ToString()); Response.End(); 
1

If you need or want a simple HTTP server with the following:

  • Can be run locally or in a network sealed from the public Internet
  • Has some basic auth
  • Handles POST requests

I built one on top of the excellent SimpleHTTPAuthServer already on PyPI. This adds handling of POST requests:

Otherwise, all the other options publicly available are already so good and robust.

I am not sure if anyone would take this much pain to test GET and POST calls. I took Python Flask module and wrote a function that does something similar to what @Robert shared.

from flask import Flask, request app = Flask(__name__) @app.route('/method', methods=['GET', 'POST']) @app.route('/method/<wish>', methods=['GET', 'POST']) def method_used(wish=None): if request.method == 'GET': if wish: if wish in dir(request): ans = None s = "ans = str(request.%s)" % wish exec s return ans else: return 'This wish is not available. The following are the available wishes: %s' % [method for method in dir(request) if '_' not in method] else: return 'This is just a GET method' else: return "You are using POST" 

When I run this, this follows:

C:\Python27\python.exe E:/Arindam/Projects/Flask_Practice/first.py * Restarting with stat * Debugger is active! * Debugger PIN: 581-155-269 * Running on (Press CTRL+C to quit) 

Now lets try some calls. I am using the browser.

  • This is just a GET method 
  • This wish is not available. The following are the available wishes: 
    ['application', 'args', 'authorization', 'blueprint', 'charset', 'close', 'cookies', 'data', 'date', 'endpoint', 'environ', 'files', 'form', 'headers', 'host', 'json', 'method', 'mimetype', 'module', 'path', 'pragma', 'range', 'referrer', 'scheme', 'shallow', 'stream', 'url', 'values'] 
  • {'wsgi.multiprocess': False, 'HTTP_COOKIE': 'csrftoken=YFKYYZl3DtqEJJBwUlap28bLG1T4Cyuq', 'SERVER_SOFTWARE': 'Werkzeug/0.12.2', 'SCRIPT_NAME': '', 'REQUEST_METHOD': 'GET', 'PATH_INFO': '/method/environ', 'SERVER_PROTOCOL': 'HTTP/1.1', 'QUERY_STRING': '', 'werkzeug.server.shutdown': , 'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36', 'HTTP_CONNECTION': 'keep-alive', 'SERVER_NAME': '127.0.0.1', 'REMOTE_PORT': 49569, 'wsgi.url_scheme': 'http', 'SERVER_PORT': '5000', 'werkzeug.request': , 'wsgi.input': , 'HTTP_HOST': '127.0.0.1:5000', 'wsgi.multithread': False, 'HTTP_UPGRADE_INSECURE_REQUESTS': '1', 'HTTP_ACCEPT': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 'wsgi.version': (1, 0), 'wsgi.run_once': False, 'wsgi.errors': ", mode 'w' at 0x0000000002042150>", 'REMOTE_ADDR': '127.0.0.1', 'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate, sdch, br'} 

Another one that offers some customization and is easy to use (no install, signup) is .

You create a endpoint, makes a initial request to it and can tweak the responses.

some online httpbin:

get client ip, port, ua..

get client ip, isp

Just set one up yourself. Copy this snippet to your webserver.

 echo "<pre>"; print_r($_POST); echo "</pre>"; 

Just post what you want to that page. Done.

1