কার্ল কমান্ড কার্যকর করতে পাইথন কীভাবে ব্যবহার করতে হয়


171

আমি পাইথনে কার্ল কমান্ড কার্যকর করতে চাই।

সাধারণত, আমার কেবল টার্মিনালে কমান্ডটি প্রবেশ করতে হবে এবং রিটার্ন কী টিপুন। তবে অজগরটিতে এটি কীভাবে কাজ করে তা আমি জানি না।

কমান্ডটি নীচে দেখায়:

curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere

প্রতিক্রিয়া পেতে একটি অনুরোধ.জসন ফাইল পাঠাতে হবে।

আমি অনেক অনুসন্ধান এবং বিভ্রান্ত হয়ে পড়েছি। আমি কোডের একটি অংশ লেখার চেষ্টা করেছি, যদিও আমি পুরোপুরি বুঝতে পারি না could এটি কাজ করে না।

import pycurl
import StringIO

response = StringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere')
c.setopt(c.WRITEFUNCTION, response.write)
c.setopt(c.HTTPHEADER, ['Content-Type: application/json','Accept-Charset: UTF-8'])
c.setopt(c.POSTFIELDS, '@request.json')
c.perform()
c.close()
print response.getvalue()
response.close()

ত্রুটি বার্তাটি 'পার্স ত্রুটি' anyone কেউ কীভাবে এটি ঠিক করবেন আমাকে বলতে পারেন? বা সঠিকভাবে Sever থেকে প্রতিক্রিয়া পেতে কিভাবে?


1
আপনি কি ত্রুটির ট্রেসব্যাক অন্তর্ভুক্ত করতে পারেন?
শক্তিমান

এটা কি সাহায্য করে? stackoverflow.com/questions/2667509/curl-alternative-in-python
br3w5

1
FWIW, আপনি ব্যবহার বিবেচনা করেছেন pycurl "পাইথন কার্ল বাঁধাই" ? আপনার প্রয়োজন অনুসারে, এটি দৃশ্যের পিছনে কমান্ড লাইনটি ব্যবহার করার চেয়ে আরও দক্ষ / সুবিধাজনক হতে পারে।
সিলভাইন লেরক্স ২x

3
আপনার কি সিআরএল ব্যবহার করা দরকার? আপনি কি অনুরোধ বিবেচনা করেছেন ? আরও সহজ হতে পারে, বিশেষত আপনি যদি অজগর থেকে নতুন হন, যা ক্ষমাযোগ্য নয়।
vch

3
উম্ম অজগর বেশ ক্ষমাশীল .... সম্ভবত কার্ল নয়
জোড়ান বিসলে

উত্তর:


191

সরলতার স্বার্থে, আপনার অনুরোধগুলি গ্রন্থাগারটি ব্যবহার করা উচিত ।

জসন প্রতিক্রিয়া সামগ্রী সহ একটি উদাহরণ হতে পারে:

import requests
r = requests.get('https://github.com/timeline.json')
r.json()

আপনি যদি আরও তথ্যের সন্ধান করেন, কুইকস্টার্টে বিভাগে, তাদের প্রচুর কাজের উদাহরণ রয়েছে।

সম্পাদনা করুন:

আপনার নির্দিষ্ট কার্ল অনুবাদ জন্য:

import requests
url = 'https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere'
payload = open("request.json")
headers = {'content-type': 'application/json', 'Accept-Charset': 'UTF-8'}
r = requests.post(url, data=payload, headers=headers)

1
দয়া করে @ ট্রিকনোলজি, বাগটি অনুসন্ধান করার চেষ্টা করুন এবং, যদি আপনি সঠিক সমাধান খুঁজে না পান তবে একটি নতুন প্রশ্ন পোস্ট করুন।
অটোরিলাস

4
অন্য কারও যদি এটি দেখার জন্য ঘটে থাকে তবে আমার কেন এমনটি হচ্ছিল তার কারণ হ'ল আমি অভিধানের কোনও অবজেক্টের পরিবর্তে আমার পে-লোড হিসাবে একটি স্ট্রিং দিচ্ছিলাম।
ট্রিকনোলজি

1
মনে হচ্ছে শিরোনামগুলিতে একটি ছোট টাইপ রয়েছে, যা পড়তে হবে'Accept-Charset': 'UTF-8'
স্টিফেন লিড

1
ফাইলটি খোলার এবং JSON প্রেরণের আগে পার্স করা অকারণে অকার্যকর। আপনি জেএসওনকে বিশ্লেষণ করুন এরপরে এটিকে আবার স্ট্রিংয়ে জসন.ডাম্পস () দিয়ে রূপান্তর করুন। এটি একটি খারাপ উত্তর।
নাথান কে

4
Requestsআপনার ইনস্টল এবং পরিচালনা করতে হবে এমন একটি অতিরিক্ত নির্ভরতা। একটি সহজ সমাধান একটা মানসম্মত লাইব্রেরি ব্যবহার জন্য, দেখুন stackoverflow.com/a/13921930/111995
geekQ

93

শুধু এই ওয়েবসাইট ব্যবহার করুন । এটি যে কোনও কার্ল কমান্ডকে পাইথন, নোড.জেএস, পিএইচপি, আর, বা Go তে রূপান্তর করবে।

উদাহরণ:

curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/asdfasdfasdf

পাইথনে এটি হয়ে ওঠে,

import requests

headers = {
    'Content-type': 'application/json',
}

data = '{"text":"Hello, World!"}'

response = requests.post('https://hooks.slack.com/services/asdfasdfasdf', headers=headers, data=data)

3
আপনার জেএসওএন সঠিকভাবে ফর্ম্যাট হয়েছে "জসন" মডিউলটি আমদানি করুন এবং উপরের ক্ষেত্রে ডেটা পেলোডে ডেটা = জসন.ডাম্পস (ডেটা) -এ জাসন.ডাম্পস (পেলোড) ব্যবহার করুন
রিচার্ড বোউন

23
import requests
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere"
data = requests.get(url).json

হতে পারে?

আপনি যদি একটি ফাইল প্রেরণ চেষ্টা করছেন

files = {'request_file': open('request.json', 'rb')}
r = requests.post(url, files=files)
print r.text, print r.json

অহ ধন্যবাদ @ লুকাসগ্রাফ এখন তার মূল কোডটি কী করছে তা আমি আরও ভাল করে বুঝতে পারি

import requests,json
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere"
my_json_data = json.load(open("request.json"))
req = requests.post(url,data=my_json_data)
print req.text
print 
print req.json # maybe? 

এটি requests.jsonফাইল থেকে ডেটা অন্তর্ভুক্ত না করে , এবং Content-Type: application/jsonশিরোনাম সেট করে না - এছাড়াও, এটি একটি GETঅনুরোধ প্রেরণ করবে , একটি নয় POST
লুকাশ গ্রাফ

1
curl -d @<file>ফিল্ডগুলি পোস্ট করার জন্য পড়বে <file>- এটি ফাইল আপলোডের মতো নয়।
লুকাশ গ্রাফ

@ লুকাসগ্রাফ ধন্যবাদ :) ... আমি কার্ল বেশি ব্যবহার করি না (পড়ুন: প্রায় কখনই নয়)
জোড়ান বিসলে

একটি ছোট নোট, data = requests.get(url).jsonহওয়া উচিতdata = requests.get(url).json()
dpg5000

২০১৪ সালে এটি এখন একটি সম্পত্তি এটির একটি ফাংশন :) যদিও ভাল কল
জোড়ান ব্যাসলি

19
curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere

এর অজগর বাস্তবায়ন যেমন হতে পারে

import requests

headers = {
    'Content-Type': 'application/json',
}

params = (
    ('key', 'mykeyhere'),
)

data = open('request.json')
response = requests.post('https://www.googleapis.com/qpxExpress/v1/trips/search', headers=headers, params=params, data=data)

#NB. Original query string below. It seems impossible to parse and
#reproduce query strings 100% accurately so the one below is given
#in case the reproduced version is not "correct".
# response = requests.post('https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere', headers=headers, data=data)

এই লিঙ্কটি পরীক্ষা করে দেখুন , এটি curl কমান্ডকে অজগর, পিএইচপি এবং নোডজে রূপান্তর করতে সহায়তা করবে


8

আমার উত্তরটি ডাব্লুআরটি পাইথন ২.6.২।

import commands

status, output = commands.getstatusoutput("curl -H \"Content-Type:application/json\" -k -u (few other parameters required) -X GET https://example.org -s")

print output

এটি গোপনীয়ভাবে প্রয়োজনীয় প্যারামিটারের কোজ সরবরাহ না করার জন্য আমি ক্ষমাপ্রার্থী।


আপনার যদি কার্ল থেকে কিছু বিশেষ বিকল্প ব্যবহার করতে চান - - সমাধান করুন এটি the ধন্যবাদ.
নিকোস্কিপ

আমি কীভাবে কেবল
টেবিলার স্ট্যাটাস

5

কিছু ব্যাকগ্রাউন্ড: আমি ঠিক এই প্রশ্নটি খুঁজতে গিয়েছিলাম কারণ সামগ্রীগুলি পুনরুদ্ধার করার জন্য আমাকে কিছু করতে হয়েছিল তবে আমার কাছে যা ছিল তা হ'ল এসএসএল অপর্যাপ্ত সমর্থন সহ পাইথনের একটি পুরানো সংস্করণ। আপনি যদি পুরানো ম্যাকবুকে থাকেন তবে আপনি কী জানেন আমি কী বলছি। যাই হোক না কেন, curlশেল থেকে জরিমানা (আমার সন্দেহ হয় এটির সাথে আধুনিক এসএসএল সমর্থন যুক্ত রয়েছে) তাই কখনও কখনও আপনি এটি ব্যবহার না করে requestsবা এটি করতে চানurllib2

আপনি subprocessকার্যকর করতে curlএবং পুনরুদ্ধার করা সামগ্রীতে পেতে মডিউলটি ব্যবহার করতে পারেন :

import subprocess

// 'response' contains a []byte with the retrieved content.
// use '-s' to keep curl quiet while it does its job, but
// it's useful to omit that while you're still writing code
// so you know if curl is working
response = subprocess.check_output(['curl', '-s', baseURL % page_num])

পাইথন 3 এর subprocessমডিউলটিতে .run()বেশ কয়েকটি দরকারী বিকল্প রয়েছে। আমি এটিকে এমন কাউকে রেখে দেব যিনি আসলে উত্তরটি দেওয়ার জন্য অজগর 3 চালাচ্ছেন।


-4

এটি নীচে উল্লিখিত psuedo কোড পদ্ধতির সাহায্যে অর্জন করা যেতে পারে

আমদানি করুন ওএস আমদানির অনুরোধ ডেটা = os.execute (কার্ল ইউআরএল) আর = ডেটা.জসন ()


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