উত্তর:
আপনাকে আপনার পরামিতিগুলি urlencode()
ম্যাপিং (ডিক), বা 2-টিপলগুলির ক্রম হিসাবে যেমন পাস করতে হবে :
>>> import urllib
>>> f = { 'eventName' : 'myEvent', 'eventDescription' : 'cool event'}
>>> urllib.urlencode(f)
'eventName=myEvent&eventDescription=cool+event'
পাইথন 3 বা তার বেশি
ব্যবহার করুন:
>>> urllib.parse.urlencode(f)
eventName=myEvent&eventDescription=cool+event
মনে রাখবেন যে এটি সাধারণভাবে ব্যবহৃত অর্থে ইউআরএল এনকোডিং করে না (আউটপুটটি দেখুন)। যে ব্যবহারের জন্য urllib.parse.quote_plus
।
আপনি যা সন্ধান করছেন তা হ'ল urllib.quote_plus
:
>>> urllib.quote_plus('string_of_characters_like_these:$#@=?%^Q^$')
'string_of_characters_like_these%3A%24%23%40%3D%3F%25%5EQ%5E%24'
পাইথন 3-এ, urllib
প্যাকেজটিকে ছোট ছোট ভাগে বিভক্ত করা হয়েছে। আপনি ব্যবহার করবেন urllib.parse.quote_plus
( parse
চাইল্ড মডিউলটি নোট করুন )
import urllib.parse
urllib.parse.quote_plus(...)
import urllib.parse ... urllib.parse.quote_plus(query)
python3 -c "import urllib.parse, sys; print(urllib.parse.quote_plus(sys.argv[1])) "string to encode"
কমান্ড লাইনে একটি লাইনারের জন্য
Urllib এর পরিবর্তে অনুরোধগুলি চেষ্টা করুন এবং আপনার ইউরেনকোড নিয়ে বিরক্ত করার প্রয়োজন নেই!
import requests
requests.get('http://youraddress.com', params=evt.fields)
সম্পাদনা করুন:
যদি কোনও নামের জন্য আপনার অর্ডার করা নাম-মান জোড় বা একাধিক মান প্রয়োজন হয় তবে এই জাতীয় প্যারাম সেট করুন:
params=[('name1','value11'), ('name1','value12'), ('name2','value21'), ...]
অভিধান ব্যবহার করার পরিবর্তে।
নীচে কিছু সমস্যাগুলি কীভাবে মোকাবেলা করতে হয় সে সম্পর্কিত একটি সম্পূর্ণ সমাধান রয়েছে।
### ********************
## init python (version 2.7.2 )
import urllib
### ********************
## first setup a dictionary of name-value pairs
dict_name_value_pairs = {
"bravo" : "True != False",
"alpha" : "http://www.example.com",
"charlie" : "hello world",
"delta" : "1234567 !@#$%^&*",
"echo" : "user@example.com",
}
### ********************
## setup an exact ordering for the name-value pairs
ary_ordered_names = []
ary_ordered_names.append('alpha')
ary_ordered_names.append('bravo')
ary_ordered_names.append('charlie')
ary_ordered_names.append('delta')
ary_ordered_names.append('echo')
### ********************
## show the output results
if('NO we DO NOT care about the ordering of name-value pairs'):
queryString = urllib.urlencode(dict_name_value_pairs)
print queryString
"""
echo=user%40example.com&bravo=True+%21%3D+False&delta=1234567+%21%40%23%24%25%5E%26%2A&charlie=hello+world&alpha=http%3A%2F%2Fwww.example.com
"""
if('YES we DO care about the ordering of name-value pairs'):
queryString = "&".join( [ item+'='+urllib.quote_plus(dict_name_value_pairs[item]) for item in ary_ordered_names ] )
print queryString
"""
alpha=http%3A%2F%2Fwww.example.com&bravo=True+%21%3D+False&charlie=hello+world&delta=1234567+%21%40%23%24%25%5E%26%2A&echo=user%40example.com
"""
পাইথন 3:
urllib.parse.quote_plus (স্ট্রিং, নিরাপদ = '', এনকোডিং = কিছুই নয়, ত্রুটিগুলি = কিছুই নয়)
urllib.parse.quote()
নিজেকে পছন্দ করি যেহেতু এটি %20
বরং ব্যবহার করে +
।
এটা চেষ্টা কর:
urllib.pathname2url(stringToURLEncode)
urlencode
কাজ করবে না কারণ এটি কেবল অভিধানে কাজ করে। quote_plus
সঠিক আউটপুট উত্পাদন করেনি।
my string
করতে চাই my%20string
। আপনার সমাধানটি এটির জন্য কবজির মতো কাজ করে!
%20
পরিবর্তে আমার জন্য কাজ করেছেন +
। ধন্যবাদ
মনে রাখবেন যে urllib.urlencode সর্বদা কৌতুক করে না। সমস্যাটি হ'ল কিছু পরিষেবা আর্গুমেন্টের ক্রমকে যত্ন করে, আপনি অভিধান তৈরি করার সময় হারিয়ে যায়। এই জাতীয় ক্ষেত্রে, রিকি প্রস্তাবিত হিসাবে urllib.quote_plus আরও ভাল।
>>> import urllib >>> urllib.urlencode([('name', 'brandon'), ('uid', 1000)]) 'name=brandon&uid=1000'
ভবিষ্যতের রেফারেন্সের জন্য (উদা: পাইথন 3 এর জন্য)
>>> import urllib.request as req
>>> query = 'eventName=theEvent&eventDescription=testDesc'
>>> req.pathname2url(query)
>>> 'eventName%3DtheEvent%26eventDescription%3DtestDesc'
'c:/2 < 3'
উইন্ডোজ জন্য আউটপুট হয় '///C://2%20%3C%203'
। আমি এমন কিছু চাই যা কেবল আউটপুট করে 'c:/2%20%3C%203'
।
স্ক্রিপ্ট / প্রোগ্রামগুলিতে ব্যবহারের জন্য যা পাইথন 2 এবং 3 উভয়কে সমর্থন করতে হবে, ছয়টি মডিউল উদ্ধৃতি এবং ইউরেনকোড ফাংশন সরবরাহ করে:
>>> from six.moves.urllib.parse import urlencode, quote
>>> data = {'some': 'query', 'for': 'encoding'}
>>> urlencode(data)
'some=query&for=encoding'
>>> url = '/some/url/with spaces and %;!<>&'
>>> quote(url)
'/some/url/with%20spaces%20and%20%25%3B%21%3C%3E%26'
পাইথন 3 urllib3 সঠিকভাবে কাজ করার জন্য, আপনি এর অফিসিয়াল ডক্স অনুযায়ী অনুসরণ করতে পারেন :
import urllib3
http = urllib3.PoolManager()
response = http.request(
'GET',
'https://api.prylabs.net/eth/v1alpha1/beacon/attestations',
fields={ # here fields are the query params
'epoch': 1234,
'pageSize': pageSize
}
)
response = attestations.data.decode('UTF-8')