接受GET/POST请求的HTTP测试服务器

628

我需要一个实时测试服务器,可以通过HTTP GET接受我的基本信息请求,并允许我进行POST(即使它实际上没有做任何事情)。这完全是为了测试目的。

一个很好的例子在这里。它轻松地接受GET请求,但我需要一个可以接受POST请求的服务器。

是否有人知道我可以发送虚拟测试消息的服务器?


2
你想让它记录POST请求吗? - Jared Farrish
21个回答

1015

https://httpbin.org/

它回显了您的请求中使用的数据,这些类型包括:

  • https://httpbin.org/relative-redirect/:n 302相对重定向,重定向n次。
  • https://httpbin.org/cookies 返回cookie数据。
  • https://httpbin.org/cookies/set/:name/:value 设置简单的cookie。
  • https://httpbin.org/basic-auth/:user/:passwd 挑战HTTP基本认证。
  • https://httpbin.org/hidden-basic-auth/:user/:passwd 404的基本认证。
  • https://httpbin.org/digest-auth/:qop/:user/:passwd 挑战HTTP摘要认证。
  • https://httpbin.org/stream/:n 流式传输n-100行数据。
  • https://httpbin.org/delay/:n 延迟n-10秒响应。

  • 8
    有没有可能创建一个本地的 httpbin 服务器? - user3280180
    12
    @user3280180 提到的命令是 $ pip install httpbin gunicorn && gunicorn httpbin:app,它是用于安装和运行 httpbin.org 的。 - HVNSweeting
    1
    你如何使用它 - http://httpbin.org/post 不起作用,在 http://httpbin.org 上的链接已被禁用 - 它不再可点击。这里还有其他事情需要做吗?没有指导,我又不是读心术士... - therobyouknow
    7
    点击链接会执行GET请求,但如果您对该URL进行POST请求,它也可以工作。尝试使用以下命令:curl -iX POST httpbin.org/post,它将返回200。 - Robert
    2
    至少httpbin.org/headers将在POST时返回405-方法不允许,因此这不应该是一个被接受的答案。 - user239558
    显示剩余4条评论

    174

    这里有ptsv3.com

    "在这里,您将找到一个服务器,它可以接收您想要提供的任何POST,并为您存储内容以供查看。"


    10
    如果你在运行远程服务器触发的请求,而且无法访问其内部时,这个很实用,因为它会将请求保存以便稍后检索。 - ozmo
    2
    与 http://httpbin.org/put 不同的是,它返回一个非常有用的响应,提供有关您请求的详细信息。特别是在文件上传的情况下,它非常有帮助,因为您可以看到您上传到服务器上的文件,我相信这在 http://httpbin.org 上是不可能的。 - ViFI
    1
    网址已经失效。 - Sebastian
    5
    请使用http://ptsv3.com/。 - Mikolaj Buchwald
    1
    https://killedbygoogle.com - luckydonald
    显示剩余4条评论

    81

    Webhook Tester是一款非常好用的工具:https://webhook.siteGitHub

    这里输入图片描述

    对我来说,它展示了请求者的IP地址,这在你需要列入白名单的IP地址并不确定IP是什么时非常有帮助。


    点赞 https - Oleg Khalidov
    完美运作,即使在您不是呼叫的发起者的情况下(只需提供回调URL)。 - Sebastian

    54

    nc一行命令的本地测试服务器

    在Linux下只需一行命令即可设置本地测试服务器:

    nc -kdl 8000
    

    或者,为了解除像wget这样等待回复的HTTP客户端的阻塞,实际上发送一个最小的空HTTP回复,这样您可以在另一个shell上进行更多的测试,而无需手动中断客户端(感谢nikniknikzelanix在评论中提供的建议)。
    while true; do printf 'HTTP/1.1 200 OK\r\n\r\n' | nc -Nl 8000; done
    

    在另一个终端上创建示例请求制造器:
    wget http://localhost:8000
    

    然后在第一个窗口上,你会看到请求显示出来:
    GET / HTTP/1.1
    User-Agent: Wget/1.19.4 (linux-gnu)
    Accept: */*
    Accept-Encoding: identity
    Host: localhost:8000
    Connection: Keep-Alive
    

    nc来自netcat-openbsd软件包,在Ubuntu上广泛可用且预装。

    有关最小值HTTP回复的相关问题:

    在Ubuntu 22.10上测试,nc来自netcat-openbsd 1.218。


    14
    每当运行while true; do echo -e "HTTP/1.1 200 OK\n" | nc -Nl 8000; done时,nc都会回复一个200 OK的代码。 - nikniknik
    @nikniknik - 我真的很想把这个作为答案来归功于你。 - mark
    @标记已添加到答案中,所以你可以给我点赞而不是他 >:-) - Ciro Santilli OurBigBook.com
    1
    @CiroSantilliOurBigBook.com - 你低估了我。我从一开始就赞同了你的回答。 - mark
    @标记 剧情反转!!! - Ciro Santilli OurBigBook.com
    显示剩余2条评论

    40

    如果你想要一个本地测试服务器,它可以接受任何URL并将请求信息输出到控制台,你可以使用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 http://localhost:${port}/`);
    });
    

    将它保存到一个名为'echo.js'的文件中,然后按以下方式运行:

    $ node echo.js
    Server running at http://localhost:3000/
    

    您可以提交数据:

    $ curl -d "[1,2,3]" -XPOST http://localhost:3000/foo/bar
    

    将在服务器的标准输出中显示:

    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]
    

    39

    http://requestb.in 类似于其他提到的工具,并且还有一个非常好的用户界面。

    RequestBin 提供一个URL,它会收集发送到它的请求,并让您以人性化方式检查它们。 使用 RequestBin 查看您的 HTTP 客户端正在发送的内容,或者检查和调试 webhook 请求。

    尽管自2018年3月21日起已停止服务。

    由于持续滥用导致很难可靠地保持该网站运行,我们已经停止了 RequestBin 的公共托管版本。请参见说明以设置自己的本地实例。


    5
    PutsReq与RequestBin类似,但它允许您使用JS编写所需的响应。 - Pablo Cantero
    4
    RequestBin不再可用。 - AmokHuginnsson
    http://requestb.in现在重定向到https://pipedream.com/requestbin。 - Flair

    34

    看看PutsReq,它与其他类似的工具相似,但它还允许您使用JavaScript编写所需的响应。


    2
    您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - AlbatrossCafe
    这个很棒。在这里,我真的只能得到我作为请求所放入的响应。 - Stephan LV

    16
    这里有一个Postman回声:https://postman-echo.com 例子:
    curl --request POST \
      --url https://postman-echo.com/post \
      --data 'This is expected to be sent back as part of response body.'
    

    回复:
    {"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":{"...
    

    9
    你可以在本地运行实际的Ken Reitz httpbin服务器(使用Docker或裸机):

    https://github.com/postmanlabs/httpbin

    运行Docker化

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

    直接在你的计算机上运行

    ## 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
    

    现在您已经成功运行个人的httpbin实例,网址为http://0.0.0.0:8000(对您的局域网上所有人可见)。

    最简Flask REST服务器

    我想要一个返回预定义响应的服务器,所以在这种情况下我发现使用最小的Flask应用程序更简单:

    #!/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)
    

    alias httpbin='docker run -p 80:80 kennethreitz/httpbin' - Sean Breckenridge

    6
    我不知道为什么这里的所有答案都把一个非常简单的工作搞得很复杂!
    当有一个HTTP请求时,实际上客户端会向服务器发送一个HTTP_MESSAGE(了解什么是HTTP_MESSAGE)并且你只需要两个简单的步骤就可以创建一个服务器:
    1. 安装netcat: 在许多基于Unix的系统中,你已经安装了它。如果你使用Windows,只需搜索一下,安装过程非常简单,你只需要一个nc.exe文件,然后将该nc.exe文件的路径复制到你的环境变量中,并检查是否一切正常(使用nc -h命令)。
    2. 创建一个监听在localhost:12345上的服务器: 只需在终端中输入nc -l -p 12345,一切就完成了!(在Mac上使用nc -l 12345,感谢Silvio Biasiol)
    现在你有一个服务器(不是真正的网络服务器,只是一个网络监听器),它正在监听 http://localhost:12345 ,例如,如果你是一个 JavaScript 开发者,你可以使用 axios 发送一个 POST 请求。
    axios.post('http://localhost:12345', { firstName: 'Fred' })
    

    或者自己创建一个xhr,或者在HTML文件中创建一个表单并将其提交到服务器,类似于:
    <form action="http://localhost:12345" method="post">
    

    或者使用curlwget或其他方法发送请求。然后检查您的终端,一个原始的HTTP_MESSAGE应该出现在您的终端上,您可以开始愉快地进行黑客攻击 ;) 输入图像描述

    2
    在 Mac 上只需使用 nc -l 12345 - Silvio Biasiol
    2
    这不是一个网页服务器,而是一个网络监听器。它不会发送任何响应(包括响应头等信息以及升级等)。 - WoJ
    @WoJ 我并没有说它是一个“Web服务器”,请再次阅读我的回答,这只是一种检查真实的Web服务器在接收请求时会得到什么的方法。无论如何,我已经在回答中添加了“(不是真正的Web服务器,只是一个网络监听器)”这部分,以便像你这样的人能够理解! - TechDogLover OR kiaNasirzadeh
    1
    @TechDogLoverORkiaNasirzadeh:问题是“接受GET/POST请求的HTTP测试服务器”。一个HTTP服务器是接受特定调用并提供答案的东西。网络监听器不是一个服务器,就像废物处理系统不是银行一样,只因为你可以把钱扔进去。网络监听器在很多方面都很好用,只是不适合作为Web服务器——这就是问题所在。 - WoJ

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接