2016-03-07 47 views
-2

需要這樣的:如何URL編碼這個

POST&https%3A%2F%2Fsecure.trademe.co.nz%2FOauth%2FRequestToken&oauth_callback%3Dhttp%253A%252F%252Fwww.website-tm-access.co.nz%252Ftrademe-callback%26oauth_consumer_key%3DC74CD73FDBE37D29BDD21BAB54BC70E422%26oauth_nonce%3D7O3kEe%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1285532322%26oauth_version%3D1.0%26scope%3DMyTradeMeRead%252CMyTradeMeWrite 

Myattempt:

New_base_string ="POST&https%3A%2F%2Fsecure.trademe.co.nz%2FOauth%2FRequestToken&oauth_callback%3Dhttp%253A%252F%252Fwww.website-tm-access.co.nz%252Ftrademe-callback%26oauth_consumer_key%" + str(consumer_key) +"3DC74CD73FDBE37D29BDD21BAB54BC70E422%26oauth_nonce%3" + str(nonce) + "%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3" + str(time) + "%26oauth_version%3D1.0%26scope%3DMyTradeMeRead%252CMyTradeMeWrite" 

我只是想將其追加到年底,將這項工作或將我需要追加到列表然後編碼?

所以這樣的:

headers = { my_variable + other_variable } 

authorization = '5C82CC6BC7C6472154FBC9CAB24A29A2 ' + ', '.join([key + '="' + urllib.parse.quote_plus(str(value)) + '"' for key, value in headers.items()]) 
+0

它看起來像串部分編碼的,有些部件可能編碼兩次。你可以先在http://meyerweb.com/eric/tools/dencoder/嘗試一下,告訴我們你期望的輸入和輸出是什麼? – martin

回答

1

一般

如果您想URL編碼參數,以您的POST請求的最佳方式是:

import urllib 

f = { 'eventName' : 'myEvent', 
     'eventDescription' : 'cool event', 
     'url' : 'http://www.google.com'} 

print 'POST&%s' % urllib.urlencode(f) 

輸出:

POST&eventName=myEvent&url=http%3A%2F%2Fwww.google.com&eventDescription=cool+event 

與字典的,如果你想訂購它只是使用列表

沒有下令
import urllib 

f = [ ('eventName', 'myEvent'), 
     ('eventDescription', 'cool event'), 
     ('url', 'http://www.google.com')] 

print 'POST&%s' % urllib.urlencode(f) 

輸出

POST&eventName=myEvent&eventDescription=cool+event&url=http%3A%2F%2Fwww.google.com 

如何讓你需要這個字符串(Python的3.5)

雖然一般的例子是在python 2.7中測試的,我用python 3.5編寫了你的​​例子。

import urllib.parse 

method = "POST" 
url = "https://secure.trademe.co.nz/Oauth/RequestToken" 

params = [('oauth_callback', 'http://www.website-tm-access.co.nz/trademe-callback'), 
      ('oauth_consumer_key', 'C74CD73FDBE37D29BDD21BAB54BC70E422'), 
      ('oauth_nonce', '7O3kEe'), 
      ('oauth_signature_method', 'HMAC-SHA1'), 
      ('oauth_timestamp', 1285532322), 
      ('oauth_version', 1.0), 
      ('scope', "MyTradeMeRead,MyTradeMeWrite")] 

print('POST&%(url)s&%(params)s' % { 'url' : urllib.parse.quote_plus(url), 'params' : urllib.parse.quote_plus(urllib.parse.urlencode(params)) }) 

輸出

POST&https%3A%2F%2Fsecure.trademe.co.nz%2FOauth%2FRequestToken&oauth_callback%3Dhttp%253A%252F%252Fwww.website-tm-access.co.nz%252Ftrademe-callback%26oauth_consumer_key%3DC74CD73FDBE37D29BDD21BAB54BC70E422%26oauth_nonce%3D7O3kEe%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1285532322%26oauth_version%3D1.0%26scope%3DMyTradeMeRead%252CMyTradeMeWrite 
+0

是urllib.parse.quote 3.3替代urllib.quote_plus?和urllib.urlencode for urllib.parse.urlencode? – musss

+0

@ musss只是看你需要它的Python 3.3? – Kordi

+0

是的請:D 3.3 – musss