कर्ल इस क्वेरी स्ट्रिंग को छोटा क्यों कर रहा है?


90

मुझे यकीन है कि इस का जवाब कुछ स्पष्ट रूप से स्पष्ट चरित्र एन्कोडिंग मुद्दा होने जा रहा है ...

मैं एक अजगर ऐप में कुछ एंडपॉइंट्स का परीक्षण करने के लिए कमांड लाइन पर कर्ल का उपयोग कर रहा हूं। समापन बिंदु अक्षांश और देशांतर के url params लेता है। कुछ खास नहीं। मैंने आज्ञा दी:

curl -v -L http://localhost:5000/pulse/?lat=41.225&lon=-73.1

सर्वर प्रतिक्रिया, क्रिया कर्ल आउटपुट के साथ:

* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET /pulse/?lat=41.225 HTTP/1.1
> User-Agent: curl/7.21.6 (i686-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3
> Host: localhost:5000
> Accept: */*
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 500 INTERNAL SERVER ERROR
< Content-Type: application/json
< Content-Length: 444
< Server: Werkzeug/0.8.1 Python/2.7.2+
< Date: Wed, 01 Feb 2012 17:06:29 GMT
< 
{
    "msg": "TypeError: float() argument must be a string or a number", 
    "flag": 0, 
    "stack": [
        "Traceback (most recent call last):", 
        "  File \"engine.py\", line 139, in dispatch_request", 
        "    return getattr(self, 'action_'+endpoint)(request, **values)", 
        "  File \"engine.py\", line 818, in action_getpulse", 
        "    lon = float(request.args.get('lon'))"
    ], 
    "err": 1
* Closing connection #0
}
[1]+  Done

उस डंप की दूसरी लाइन पर, यह स्पष्ट है कि दूसरा परम, lonभेजा नहीं जा रहा है। मैं क्या गलत कर रहा हूं? धन्यवाद।


1
संभवतः मूल प्रश्न से असंबंधित है, लेकिन अगर मुझे क्वेरी स्ट्रिंग का हिस्सा याद आ रहा था, तो मैं 400 या कुछ और
लौटाऊंगा

जवाबों:


246

प्रश्न का उत्तर, "मैं क्या गलत कर रहा हूं," यह है कि शेल एम्परसैंड ( &) देखता है और सोचता है कि कमांड का अंत है (और इसे पृष्ठभूमि में डालता है)। आपको इसे उद्धृत करने की आवश्यकता है, यही कारण है कि स्ट्रिंग काम को उद्धृत करने वाले उत्तर। आप इसे आसानी से चला सकते हैं:

curl -v -L "http://localhost:5000/pulse?lat=41.225&lon=-73.1"

मैं कोशिश कर रहा हूँ कि बहुत सफलता के बिना खिड़कियों के नीचे gitbash पर
avi.elkharrat

35

मुझे लगता है कि आप यह कोशिश कर सकते हैं:

 curl -v -L -d "lat=41.225&lon=-73.1" http://localhost:5000/pulse

डिफ़ॉल्ट रूप से, यह POST कहता है। यदि आप GET अनुरोध भेजना चाहते हैं

 curl -v -L -G -d "lat=41.225&lon=-73.1" http://localhost:5000/pulse

अधिक ...
और जब से आप उपयोग कर रहे हैं localhost, यदि आप उपयोग httpsकरना चाहते थे, तो आप शायद -kप्रमाणपत्र त्रुटियों को अनदेखा करने के विकल्प के रूप में शामिल करना चाहते हैं

यह इंगित करने के लिए रॉस का धन्यवाद ।


अगर यह पोस्ट था तो काम करेगा, लेकिन दुर्भाग्य से जीईटी पर उर चर के रूप में पारित किया जाना चाहिए।
डेकेनडेस्पराडो

4
क्या आपने -Gस्विच की कोशिश की ?
निशांत

1
यहां तक ​​कि आपके मामले में (जैसा कि सवाल है) क्या आपने अपने URL को दोहरे उद्धरण के साथ क्वेरी स्ट्रिंग के साथ घेरने की कोशिश की थी?
निशांत

और जब से आप लोकलहोस्ट का उपयोग कर रहे हैं, यदि आप https का उपयोग करना चाहते हैं, तो आप संभवतः प्रमाणपत्र त्रुटियों को अनदेखा करने के विकल्प के रूप में शामिल करना चाहते हैं।
रॉस

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