创建netcat的NC最低REST Web服务器 [英] Create a minimum REST Web Server with netcat nc

查看:170
本文介绍了创建netcat的NC最低REST Web服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在寻找利用NC是一个班轮为泊坞窗容器的最小REST Web服务器。例如:

I was looking for the minimum REST web server using nc to be a one-liner for a Docker container. For instance:

* http://localhost/echo/marcello: prints marcello
* http://localhost/date: prints the server's date
* http://localhost/...: others

我是用的netcat 最小的Web服务器看问题,但它代理的调用shell脚本......我只需要单行喜欢的

I was looking at the question "Minimal web server using netcat", but it proxies the calls to shell scripts... I just need one liners like the ones

while true ; do nc -l -p 1500 -c 'echo -e "HTTP/1.1 200 OK\n\n $(date)"'; done

发布的另一个解决方案是漫长的,从文件加载...

The other solution posted is long and loads from a file...

推荐答案

我砍死在由@syme给出的例子的http:/ /stackoverflow.com/a/24342101/433814 ,并创建了一个班轮REST服务器。有的头被丢失,但它正确处理HTTP GET和未执行的资源404。

I hacked the example given by @syme at "http://stackoverflow.com/a/24342101/433814" and created the one-liner REST server. Some headers are missing, but it correctly handles HTTP GET and 404 of non-implemented resources.

rm -f out ; mkfifo out ; trap "rm -f out" EXIT ; while true ; do cat out | nc -l 1500 > >(export REQUEST= ; while read line ; do line=$(echo "$line" | tr -d '[\r\n]') ; if echo "$line" | grep -qE '^GET /' ; then REQUEST=$(echo "$line" | cut -d ' ' -f2) ; elif [ "x$line" = x ] ; then HTTP_200="HTTP/1.1 200 OK" ; HTTP_LOCATION="Location:" ; HTTP_404="HTTP/1.1 404 Not Found" ; if echo $REQUEST | grep -qE '^/echo/' ; then printf "%s\n%s %s\n\n%s\n" "$HTTP_200" "$HTTP_LOCATION" $REQUEST ${REQUEST#"/echo/"} > out ; elif echo $REQUEST | grep -qE '^/date' ; then date > out ; elif echo $REQUEST | grep -qE '^/stats' ; then vmstat -S M > out ; elif echo $REQUEST | grep -qE '^/net' ; then ifconfig > out ; else printf "%s\n%s %s\n\n%s\n" "$HTTP_404" "$HTTP_LOCATION" $REQUEST "Resource $REQUEST NOT FOUND!" > out ; fi ; fi ; done) ; done

格式化版本位于 https://gist.github.com/marcellodesales/ 9e4288f35ac2cc3e1b83#文件格式

上面的API实现了以下内容:

The API above implements the following:


  • /回声/ {名}

返回给定(名称)

$ curl -i http://localhost:1500/echo/marcello
HTTP/1.1 200 OK
Location: /echo/marcello

marcello


  • /日期

  • 返回服务器的日期

    $ curl -i http://localhost:1500/date
    Sun Oct 19 14:12:27 PDT 2014
    


    • /统计

    • 返回服务器的统计

      $ curl -i http://localhost:1500/stats
      procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
       r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
       0  0     11    374    383   2198    0    0     6    22   33    8  2  2 97  0  0
      


      • /净

      • 打印服务器的网络

        $ curl -i http://localhost:1500/net
        docker0   Link encap:Ethernet  HWaddr 56:84:7a:fe:97:99  
                  inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
                  inet6 addr: fe80::5484:7aff:fefe:9799/64 Scope:Link
                  UP BROADCAST MULTICAST  MTU:1500  Metric:1
                  RX packets:120694 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:141757 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:0 
                  RX bytes:272911625 (272.9 MB)  TX bytes:289945068 (289.9 MB)
        
        eth0      Link encap:Ethernet  HWaddr 00:0c:29:1f:d3:b5  
                  inet addr:192.168.248.206  Bcast:192.168.248.255  Mask:255.255.255.0
                  inet6 addr: fe80::20c:29ff:fe1f:d3b5/64 Scope:Link
                  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                  RX packets:2322493 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:1098965 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:1000 
                  RX bytes:2367412677 (2.3 GB)  TX bytes:700548644 (700.5 MB)
        
        lo        Link encap:Local Loopback  
                  inet addr:127.0.0.1  Mask:255.0.0.0
                  inet6 addr: ::1/128 Scope:Host
                  UP LOOPBACK RUNNING  MTU:65536  Metric:1
                  RX packets:151566 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:151566 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:0 
                  RX bytes:305833574 (305.8 MB)  TX bytes:305833574 (305.8 MB)
        


        • / ANYTHING /不/使用

        • 有关的任​​何服务器没有实现,它打印404消息。

          For anything that the server does not implement, it prints the 404 message.

          $ curl -i http://localhost:1500/wrong
          HTTP/1.1 404 Not Found
          Location: /wrong
          
          Resource /wrong NOT FOUND!
          

          下面是从上面的GIST格式化的解决方案。你可以把它保存为web.sh并运行:)

          Here's the formatted solution from the GIST above. You can save it as "web.sh" and run :)

          rm -f out
          mkfifo out
          trap "rm -f out" EXIT
          while true
          do
            cat out | nc -l 1500 > >( # parse the netcat output, to build the answer redirected to the pipe "out".
              export REQUEST=
              while read line
              do
                line=$(echo "$line" | tr -d '[\r\n]')
          
                if echo "$line" | grep -qE '^GET /' # if line starts with "GET /"
                then
                  REQUEST=$(echo "$line" | cut -d ' ' -f2) # extract the request
                elif [ "x$line" = x ] # empty line / end of request
                then
                  HTTP_200="HTTP/1.1 200 OK"
                  HTTP_LOCATION="Location:"
                  HTTP_404="HTTP/1.1 404 Not Found"
                  # call a script here
                  # Note: REQUEST is exported, so the script can parse it (to answer 200/403/404 status code + content)
                  if echo $REQUEST | grep -qE '^/echo/'
                  then
                      printf "%s\n%s %s\n\n%s\n" "$HTTP_200" "$HTTP_LOCATION" $REQUEST ${REQUEST#"/echo/"} > out
                  elif echo $REQUEST | grep -qE '^/date'
                  then
                      date > out
                  elif echo $REQUEST | grep -qE '^/stats'
                  then
                      vmstat -S M > out
                  elif echo $REQUEST | grep -qE '^/net'
                  then
                      ifconfig > out
                  else
                      printf "%s\n%s %s\n\n%s\n" "$HTTP_404" "$HTTP_LOCATION" $REQUEST "Resource $REQUEST NOT FOUND!" > out
                  fi
                fi
              done
            )
          done
          

          这篇关于创建netcat的NC最低REST Web服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆