सरल कमांड लाइन HTTP सर्वर


121

मेरे पास एक स्क्रिप्ट है जो एक दैनिक रिपोर्ट तैयार करती है जिसे मैं तथाकथित आम जनता की सेवा करना चाहता हूं। समस्या यह है कि मैं एक HTTP सर्वर (जैसे अपाचे) के अपने सिरदर्द को सभी कॉन्फ़िगरेशन और सुरक्षा निहितार्थों के साथ जोड़ना नहीं चाहता।

वहाँ एक पूर्ण HTML सर्वर को कॉन्फ़िगर करने के प्रयास के बिना एक छोटे HTML पृष्ठ की सेवा के लिए एक मृत सरल समाधान है?



2
क्यों न सिर्फ नेटकैट का इस्तेमाल किया जाए?
डायलन

वास्तव में! HTTP का काम पूरा होने से पहले वर्ल्ड वाइड वेब की तरह FTP का प्रयोग करें! (हालांकि मुझे लगता है कि यह 1990 के दशक की शुरुआत में विश्व-व्यापी नहीं था।)
माइकल स्कैपर

1
तरीकों का एक बड़ा संग्रह इस gist
davidcondrey

जवाबों:



158

SimpleHTTPServer आज़माएं :

python -m SimpleHTTPServer
# or the Python 3 equivalent
python3 -m http.server

यह http ://0.0.0.0:8000 पर CWD (जैसे index.html) में जो कुछ भी है उसकी सेवा करेगा ।


11
आप वैकल्पिक रूप से एक पोर्ट संख्या इस तरह निर्दिष्ट कर सकते हैं python3 -m http.server 1337:। आप यह नहीं बता सकते हैं कि मैं किस आईपी को बता सकता हूं। नोट: 80 पोर्ट को सुनने के लिए आपके पास रूट विशेषाधिकार होना चाहिए, जैसे:sudo python3 -m http.server 80
हब्रो

1
यह एक अच्छा है, लेकिन इसमें एक URL को पुनर्निर्देशित करने के साथ एक अनुगामी स्लैश जोड़ा गया है। इसलिए मैं ट्विस्ट संस्करण को पसंद करता हूं:twistd -n web -p 8000 --path .
ग्रेग

--bind <address>अजगर 3.4 में जोड़ा गया था ।
drewbenn

1
डिफ़ॉल्ट श्रवण पोर्ट 8080 (python2 के साथ) को किसी और चीज़ में बदलने के लिए, बस एक पोर्ट नंबर डाल दें:python -m SimpleHTTPServer 3000
मेक्सिम लुज़िक

44

Http स्थैतिक सर्वर वन-लाइनर्स की एक बड़ी सूची है :

इस सूची पर जाने के लिए, एक समाधान होना चाहिए:

  1. सर्वर रूट के रूप में अपनी वर्तमान निर्देशिका (या एक निर्दिष्ट निर्देशिका) का उपयोग करके स्थिर फ़ाइलों की सेवा करें
  2. एक एकल, एक पंक्ति कमांड के साथ चलाने में सक्षम हो (निर्भरता ठीक है अगर वे एक बार की चीज हैं)
  3. मूल माइम प्रकारों के साथ बुनियादी फ़ाइल प्रकारों (html, css, js, चित्र) की सेवा करें (कमांड या फ़ाइलों के अलावा कोई विन्यास की आवश्यकता नहीं है)
  4. चलाना चाहिए, या एक मोड है जहाँ यह चला सकते हैं, अग्रभूमि में (यानी कोई डेमॉन)

उदाहरण के लिए:


43

उपयोग node.js, तेज और हल्के।

या

ncपोर्ट पर एक त्वरित वेबसर्वर शुरू करने और सर्वर रिस्पांस हेडर सहित एक फ़ाइल की सामग्री परोसने के लिए बस साधारण नेटकैट कमांड का उपयोग करें ।

विकिपीडिया से संदर्भ:

http://en.wikipedia.org/wiki/Netcat#Setting_up_a_one-shot_webserver_on_port_8080_to_present_the_content_of_a_file

{ echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat some.file; } | nc -l -p 8080
{ echo -ne "HTTP/1.0 200 OK\r\nContent-Length: $(wc -c <some.file)\r\n\r\n"; cat some.file; } | nc -l -p 8080

27
एक नंगे नोड.जेएस की प्रक्रिया केवल इंटरेक्टिव शेल चलाने के साथ 15 एमबी (7.5 साझा होती है) रैम की होती है। और फिर आपको इसके अंदर HTTP सर्वर चलाना होगा। यह हास्यास्पद है कि लोग इसे हल्के में देखते हैं। ;-)
jpc

हाँ, मैं इसे हल्के वजन पर विचार करता हूं, आप इस तरह के कम स्मृति पदचिह्न के साथ अच्छी तरह से स्केल कर सकते हैं। कृपया thecodinghumanist.com/blog/archives/2011/5/6/… पढ़ें हालांकि, अगर आपको नोड.जेएस का उपयोग करने के लिए बोझिल लगता है, तो सरल नेटकैट उपयोगिता अल्पकालिक उद्देश्य को अच्छी तरह से कार्य करती है।
निखिल मुल्ले

1
यदि आप अपाचे के साथ नोड की तुलना करते हैं, तो आप निश्चित रूप से सही हैं, लेकिन मैंने जो पाया वह यह था कि cr.yp.to/publicfile.html या कुछ इसी तरह की तुलना में नोड कैसे दिखता है । :)
jpc


8
ncआधारित समाधान के लिए +1 :)। ध्यान दें कि इसके लिए -neझंडे echoपोर्टेबल नहीं हो सकते हैं, printfइसके बजाय कमांड का उपयोग करना बेहतर विकल्प हो सकता है।
श्वेतवर्ण वुल्फ

29

संस्करण 5.4.0 PHP के बाद से एक अंतर्निहित वेब सर्वर भी है :

php -S localhost:8000

आप -tउदाहरण के लिए, वेब सर्वर के दस्तावेज़ निर्देशिका को निर्दिष्ट कर सकते हैं :

php -S localhost:8000 -t /var/lib/www

यदि आप नेटवर्क पर सर्वर तक पहुँचने में सक्षम होना चाहते हैं तो:

php -S 0.0.0.0:8000 -t /var/lib/www

वाह जो आसान और मददगार था!
माइकल-ओ

यह एक बहुत अच्छा है अगर आप स्थानीय रूप से php-script का परीक्षण करना चाहते हैं।
एरिक

15

नोड में एक सरल, तेज, हल्का HTTP सर्वर मॉड्यूल है। स्थापित करने के लिए:

sudo npm install http-server -g

(यह मानते हुए आप nodeऔर npmपहले से ही स्थापित।)

वेबसाइट रूट के रूप में वर्तमान निर्देशिका का उपयोग करके इसे चलाने के लिए:

http-server

यह एक सर्वर बनाता है http://0.0.0.0:8080/


यह काम करता हैं। मेरे पास एक FreeBSD मशीन पर एक नोड परियोजना है, मैं बस npm install -D http-serverप्रोजेक्ट निर्देशिका के अंदर चलता हूं और फिर अपनी package.jsonफ़ाइल में निम्नलिखित पंक्तियों को जोड़ता हूं : "scripts": { "build": "webpack && cd src/public && http-server" },अब मुझे npm run buildHTTP सर्वर को शुरू करने के लिए प्रोजेक्ट निर्देशिका को चलाने की आवश्यकता है , डिफ़ॉल्ट रूप से पोर्ट 8080 पर सुन रहा है।
user3405291

2
पहले मैंने " python3 -m http.server" की कोशिश की , लेकिन यह एकल-थ्रेडेड है और केवल 1 क्लाइंट एक बार में डाउनलोड कर सकता है, अन्य को इंतजार करने की आवश्यकता है। Node.js के साथ यह समाधान, Node के Async प्रकृति के कारण बेहतर काम करता है। यदि आप कई लोगों के साथ फ़ाइल साझा करना चाहते हैं, तो इसका उपयोग करें।
Jabba

6

SimpleHTTPServerपायथन में उपयोग करने का प्रयास करें ।

mkdir ~/public_html
command_to_generate_output > ~/public_html/output.txt

(cd ~/public_html; python -c 'import SimpleHTTPServer,BaseHTTPServer; BaseHTTPServer.HTTPServer(("", 8080), SimpleHTTPServer.SimpleHTTPRequestHandler).serve_forever()')

वेब सर्वर के लिए पहली दो लाइनें सेटअप हैं। अंतिम पंक्ति पोर्ट 8080 पर खोली गई एक साधारण वेब सर्वर बनाती है, जो केवल फाइलों से कार्य करती है ~/public_html। यदि केवल एक फ़ाइल उस निर्देशिका में है, तो केवल वह ही उजागर होती है http://localhost:8080/output.txt:।


यही कारण है कि मैं उपयोग करता हूं, बस अंतिम पंक्ति को कॉपी करें और इसे एक .pyफ़ाइल पर पेस्ट करें , फिर इसे चलाएं python(या इसे निष्पादन योग्य बनाएं)। ध्यान रखें कि आपको अजगर 2.x दुभाषिया के साथ चलना होगा।
हनान एन।

3

आप xinetd पर वापस गुल्लक कर सकते हैं । निम्नलिखित कॉन्फ़िगरेशन फ़ाइल को /etc/xinetd.d/ और सेवा xinetd पुनः लोड में रखें :

service http
{
  flags = REUSE IPv4
  protocol = tcp
  socket_type = stream
  port = 80
  wait = no
  user = nobody
  server = /bin/echo
  server_args = -e HTTP/1.0 301 Moved Permanently\nContent-Length: 0\nLocation: https://goo.gl/\n\n
  disable = no
}

मेरे पुनर्निर्देशन के लिए काम करता है:

# wget 127.0.0.1
--2016-04-04 22:56:20--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://goo.gl/ [following]
...

2

ऑल्डस्कूल रूबी वेब सर्वर HTTP:

#!/usr/bin/env ruby

require 'webrick'
server = WEBrick::HTTPServer.new(:Port => 8000,
                                 :DocumentRoot => '~/webrickroot')

# stop server with Ctrl-C
trap('INT') { server.stop }
server.start

DocumentRootअपने सेटअप के लिए संशोधित करना सुनिश्चित करें । यह भी देखें इस


2

एक अन्य विकल्प लाइटटैप स्थापित करना होगा। अनबंटू 12.04 एलटीएस पर लाइटटैप स्थापित करने के लिए निम्नलिखित कदम उठाए गए हैं।

apt-get update
apt-get upgrade --show-upgraded
apt-get install lighttpd
ifconfig
http://[your-ip-address]:80
/etc/lighttpd/lighttpd.conf (Edit to add server.port)
server.port = "8080"

नोट: डॉक्यूमेंट्रॉट वह जगह है जहां सभी वेब एक्सेस फाइल्स होंगी। स्थान / var / wwww है

उपरोक्त चरण एक बेसिक लाइटटैप वेब सर्वर स्थापित करेगा। अधिक जानकारी के लिए निम्नलिखित संदर्भ देखें

संदर्भ:



2

./devd -o -a -P devd:devd .

  • -ब्राउज़र में url खोलता है
  • -सभी इंटरफेस के लिए
  • -ऑप्टिकल यूजर / पास
  • । एक ही निर्देशिका में फ़ाइलों की सेवा

https://github.com/cortesi/devd/releases


2

थोड़े से गलत (imho) डाउन वोट वाले जवाब के लिए एक साधारण फिक्स / एन्हांसमेंट भी काम कर सकता है। आइए सबसे पहले html फाइल सेट करें ...

echo '<html><head><title>My Test File</title></head><body><hi>OK!</h1></body></html>' > my_file.html

अब आप इसे इस वन-लाइनर के साथ परोस सकते हैं:

while true; do echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n" | cat - my_file.html  | nc -l -p 8080; done

यह मूल विचार स्वयं को अन्य चालों के लिए उधार देता है जो आपके लिए अन्य catया उपधारा विचारों के माध्यम से काम कर सकते हैं जैसे:

while true; do echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nI think the date is $(date), Have a good day!" | nc -l -p 8080; done

0

बैश स्क्रिप्ट में डालने के लिए सरल नेटकैट उदाहरण:

while true ; do nc -l 80 <index.html ; done 

11
यह पूरी तरह से HTTP बोलने में विफल रहता है।
derobert

मैंने कोशिश की while [ 1=1 ] ; do echo "TEST" | nc -l 80; done- 127.0.0.1 पर जा रहा है वास्तव में सामग्री देता है। मुझे हालांकि जड़ के रूप में ऐसा करना था। इसलिए बेहद कच्चे तरीके से - यह काम पूरा कर सकता है, और मुझे यह पसंद है। मैंने LAN में दूसरी मशीन पर अपने hostnname.local पर जाने की कोशिश की और यह काम भी कर गया।
unfa

0

यहां उल्लेख के लायक एसएफके

http://stahlworks.com/dev/swiss-file-knife.html

कोई निर्भरता के साथ एक उत्कृष्ट बहुउद्देशीय उपकरण

डिब और आरपीएम फ्लेवर दोनों में उपलब्ध है

sfk httpserv -port 1234

वर्तमान निर्देशिका की सेवा करेंगे

sfk httpserv -port 1234 -rw

फ़ाइल अपलोड करने की भी अनुमति देगा


0

शुद्ध बैश: शेल स्क्रिप्ट में एक वेब सर्वर

इसके अलावा, आपको पोर्ट सुनने और स्क्रिप्ट को चलाने के लिए xinetd (मेरा मानना ​​है कि किसी भी डिस्ट्रो में उपलब्ध) की आवश्यकता होगी, इसलिए आपको bash में tcp स्टैक आदि को कोड करने की आवश्यकता नहीं है।



0

मैंने इन निर्देशों का उपयोग अपने CentOS मशीन पर एक वेब सर्वर स्थापित करने के लिए बिना sudo का उपयोग किए या किसी सिस्टम फाइल को छूने के लिए किया था:

पहले नोड स्थापित करें:

$ cd ~
$ wget https://nodejs.org/download/release/latest/node-v8.6.0-linux-x64.tar.gz
$ tar node-v8.6.0-linux-x64.tar.gz

उसके बाद http- सर्वर स्थापित करें:

$ export PATH=~/node-v8.6.0-linux-x64/bin:$PATH
$ npm install http-server

फिर बंदरगाह 12321 पर http-server चलाएं:

$ ~/node-v8.6.0-linux-x64/bin/node_modules/http-server/bin/http-server -p 12321

0

मैंने ncसमाधान को थोड़ा सुधार दिया है इसलिए:

  • filename=संकेत जोड़ता है ,
  • जब तक एक पाश में चलता है Ctrl + C,
  • एक पीआईडी ​​बचाता है /tmp/serveFile-$PORTताकि आप इसे बाद में आसानी से मार सकें।

#!/bin/bash

FILE=$1;
if [ "$FILE" == "" ] ; then echo "Usage: $0 <file-to-serve> [<port:7979>]"; exit; fi
PORT=${2:-7979}
echo Serving $FILE at $PORT, PID: $$
echo $$ > /tmp/serveFilePID-$PORT

while true; do 
    { echo -ne "HTTP/1.0 200 OK\r\nContent-Length: $(wc -c <$FILE)\r\nContent-Disposition: inline; filename=\"$(basename $FILE)\"\r\n\r\n"; cat $FILE; } | nc -l $PORT
    CODE=$?
    #echo "Code: $CODE";
    if [ $CODE -gt 128 ] ; then break; fi;
done;

rm /tmp/serveFilePID-$PORT

एक भी उपयोग कर सकता है nc -k -l ...लेकिन इस तरह से आप कर सकते हैं

  • सेवा की गई फ़ाइलों के बीच कस्टम क्रिया करें,
  • कई फाइलें वैकल्पिक करें।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.