কার্ল কেন এই কোয়েরি স্ট্রিংটি কেটে যাচ্ছে?


90

আমি নিশ্চিত যে এর উত্তরটি কিছু বেদনাদায়ক স্পষ্ট চরিত্রের এনকোডিংয়ের সমস্যা হতে চলেছে ...

আমি পাইথন অ্যাপ্লিকেশনে কিছু শেষ পয়েন্ট পরীক্ষা করতে কমান্ড লাইনে কার্ল ব্যবহার করছি। শেষের অবস্থানটি অক্ষাংশ এবং দ্রাঘিমাংশের url প্যারাম নেয়। খুব বিশেষ কিছু না। আমি আদেশটি দিয়েছি:

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প্রেরণ করা হচ্ছে না। আমি কি ভুল করছি? ধন্যবাদ


4
সম্ভবত মূল প্রশ্নের সাথে সম্পর্কিত নয়, তবে যদি আমি কোয়েরি স্ট্রিংয়ের অংশটি হারিয়ে ফেলতাম তবে আমি 500 না করে 400 বা অন্য কিছু ফিরিয়ে দেব
মাইকেল মুন্সে

উত্তর:


246

"আমি কী ভুল করছি" এর প্রশ্নের উত্তর হ'ল শেলটি এম্পারস্যান্ড ( &) দেখে এবং মনে করে যে এটি কমান্ডের শেষ (এবং এটি পটভূমিতে রাখে)। আপনাকে এটি উদ্ধৃত করতে হবে, এজন্য যে উত্তরগুলি স্ট্রিংয়ের কাজটি উদ্ধৃত করেছে। আপনি এটিকে সহজেই চালাতে পারতেন:

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

আমি চেষ্টা করে যাচ্ছি যে উইন্ডোগুলির নীচে গিটব্যাশটিতে খুব বেশি সাফল্য ছাড়াই
avi.elkharrat

35

আমি মনে করি আপনি এটি চেষ্টা করতে পারেন:

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

ডিফল্টরূপে, এটি পোস্ট করে calls আপনি যদি একটি জিইটি অনুরোধ প্রেরণ করতে চান

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

আরও ...
এবং যেহেতু আপনি ব্যবহার করছেন localhost, যদি আপনি ব্যবহার httpsকরতে চান, আপনি সম্ভবত -kশংসাপত্রের ত্রুটিগুলি উপেক্ষা করার বিকল্প হিসাবে অন্তর্ভুক্ত করতে চাইবেন

এটি নির্দেশ করার জন্য রসকে ধন্যবাদ ।


এটি যদি পোস্ট হয় তবে কাজ করবে তবে দুর্ভাগ্যক্রমে প্যারামগুলি জিইটি-র মাধ্যমে url ভেরিয়েবল হিসাবে পাস করতে হবে passed
ডিকনডেস্পেরাদো

4
আপনি কি -Gস্যুইচ চেষ্টা করেছেন ?
নিশান্ত

4
এমনকি আপনার ক্ষেত্রে (প্রশ্ন হিসাবে) আপনি কি ডাবল উদ্ধৃতি সহ ক্যোয়ারী স্ট্রিং দিয়ে আপনার URL টি ঘিরে চেষ্টা করেছিলেন?
নিশান্ত

এবং যেহেতু আপনি লোকালহোস্ট ব্যবহার করছেন, যদি আপনি https ব্যবহার করেন তবে আপনি সম্ভবত -k শংসাপত্রের ত্রুটিগুলি উপেক্ষা করার বিকল্প হিসাবে অন্তর্ভুক্ত করতে চান।
রস

এই পদ্ধতিগুলির কোনওটিই আমার পক্ষে কাজ করে না। একটি স্ট্রিং পাস করা এবং এটি সর্বদা ফাঁকা হিসাবে আসে। গ্রিজলি সার্ভারে পাঠানো হচ্ছে।
ব্যবহারকারী3217883
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.