Saya berurusan dengan platform lama yang tidak memahami parameter yang disandikan URL.
Saya memiliki parameter berikut:
params = {'fiz': 'foo:bar', 'biz': 'barfoo'}
url yang dihasilkan oleh permintaan
http://localhost/?fiz=foo%3Abar&biz=barfoo
url yang diperlukan untuk platform lama
http://localhost/?fiz=foo:bar&biz=barfoo
Saya mencoba membuat string kueri khusus dan menambahkannya ke url, namun permintaan akan mendekode kueri ini, dan menyandikannya kembali.
improt urllib
qry = urllib.urlencode(params).replace('%3A', ':')
requests.get(url+'?'+qry) #: requests encodes the colon back to %3A
Apakah ada pekerjaan cepat yang tidak terlihat bertele-tele seperti menggunakan urllib2 langsung?
apakah mungkin untuk mendapatkan daftar "aman" atau "ganti" yang terhubung ke API, ini perlu dilakukan pada lapisan permintaan karena python 2.7 diperlukan.
Ini agak canggung untuk dilakukan di Permintaan. Seperti yang saya lihat, Anda memiliki dua pilihan. Yang pertama adalah menyiapkan objek Request
sendiri:
import requests
import urllib
url = 'http://test.com/'
qry = urllib.urlencode(params).replace('%3A', ':')
s = requests.Session()
req = requests.Request(method='GET', url=url)
prep = req.prepare()
prep.url = url + qry
r = s.send(prep)
Pilihan Anda yang lain adalah membuat Transport Adapter yang mengubah URL sebelum mengirimnya, seperti:
import requests
import urllib
class MutatingAdapter(requests.adapters.HTTPAdapter):
def send(self, request, **kwargs):
main, querystr = request.url.split('?') # Nasty hack, not always valid.
querystr = urllib.unquote(querystr)
querystr = urllib.quote(querystr, '/&:=')
request.url = '?'.join([main, querystr])
super(MutatingAdapter, self).send(request, **kwargs)
Saya merekomendasikan opsi pertama.
anda dapat mencoba parameter json dari request.post() dan request.get() http://stackoverflow.com/a/26344315/1056345
Komentar yang paling membantu
Ini agak canggung untuk dilakukan di Permintaan. Seperti yang saya lihat, Anda memiliki dua pilihan. Yang pertama adalah menyiapkan objek
Request
sendiri:Pilihan Anda yang lain adalah membuat Transport Adapter yang mengubah URL sebelum mengirimnya, seperti: