2012-02-01 29 views
55

Bunun cevabı bir piton uygulamasında bazı uç noktaları test etmek için komut satırında curl kullanıyorumBu sorgu dizesi neden kırpılıyor?

... bazı acı açık karakter kodlama sorunu olacak eminim. Son nokta, enlem ve boylamın URL parametrelerini alır. Çok özel bir şey yok. ayrıntılı bukle çıkışı ile

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

Sunucu yanıt: Ben komuta koymak

* 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 

o dökümü ikinci satırında, ikinci param, lon, gönderilmemektedir aşikardır . Neyi yanlış yapıyorum? Teşekkürler.

+0

Yanıtı yeniden kabul etmeyi düşünür müsünüz? İkincisi daha hassas görünüyor. –

cevap

157

sorusuna cevabı "Ben yanlış ne yapıyorum," kabuk ve işareti (&) görür ve bu komutun sonuna sanan olmasıdır (ve geri plana koyar). Alıntı yapmanız gerekiyor, bu da dizenin alıntılandığı cevaplar. Bunu şu şekilde çalıştırabilirsiniz:

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

Kesinlikle doğru. –

+4

Bu "doğru cevap" ve diğerinden ziyade kabul edilmeli. Bir cazibe –

+0

eser Bu doğru cevap Kahretsin – Hammer

29

Bunu deneyebilirsiniz düşünüyorum: varsayılan olarak

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

, bu POST çağırır. Eğer ...
ve bir GET isteği

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

Daha göndermek istiyorsanız https kullanmak olsaydı, localhost kullandığınız beri, muhtemelen olarak -k eklemek isteyebileceğiniz Sertifika hatalarını yok sayma seçeneği

Bunu belirtmek için Ross'a teşekkürler.

+0

Eğer bu yazı yayınlanmışsa işe yarardı, ama ne yazık ki paramiterlerin GET üzerinden url değişkenleri olarak geçirilmesi gerekiyor. – DeaconDesperado

+4

'-G' değiştirmeyi denediniz mi? – Nishant

+1

durumunuzda bile (söz konusu), URL'nizi sorgu dizgisiyle çift alıntı yaparak mı çevirdiniz? – Nishant