2012-02-01 18 views
55

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

मैं कमांड लाइन पर कर्ल उपयोग कर रहा हूँ एक अजगर अनुप्रयोग में कुछ अंतिम बिंदुओं का परीक्षण करने जा रहा है कर रहा हूँ। एंडपॉइंट अक्षांश और देशांतर के यूआरएल पैरा लेता है। कुछ खास नहीं है। वर्बोज़ कर्ल उत्पादन के साथ

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, नहीं भेजा जा रहा है । मैं क्या गलत कर रहा हूं? धन्यवाद।

+0

क्या आप उत्तर को फिर से स्वीकार करने पर विचार करेंगे? दूसरा एक और सटीक दिखता है। –

उत्तर

157

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

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

बिल्कुल सही। –

+4

यह "सही उत्तर" है और इसे दूसरे के बजाय स्वीकार किया जाना चाहिए। –

+0

एक आकर्षण की तरह काम करता है – Hammer

29

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

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

डिफ़ॉल्ट रूप से, इस कॉल के बाद। आप GET अनुरोध

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

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

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

+0

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

+4

क्या आपने '-G' स्विच का प्रयास किया था? – Nishant

+1

आपके मामले में भी (जैसा कि प्रश्न में) आपने डबल यूआरएल के साथ क्वेरी स्ट्रिंग के साथ अपने यूआरएल के आस-पास की कोशिश की? – Nishant

संबंधित मुद्दे