Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对其进行URL编码_Python - Fatal编程技术网

Python 如何对其进行URL编码

Python 如何对其进行URL编码,python,Python,需要这个: 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

需要这个:

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
我的尝试:

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()])
一般的 如果要将参数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
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
如何获取您需要的字符串(Python 3.5) 虽然一般示例在Python2.7中进行了测试,但我使用Python3.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&eventName=myEvent&eventDescription=cool+event&url=http%3A%2F%2Fwww.google.com
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

看起来字符串是部分编码的,有些部分可能编码两次。您能先在这里试用一下并告诉我们您需要什么输入和输出吗?urllib.parse.quote是urllib.quote\u plus的3.3替代方案吗?urllib.urlencode for urllib.parse.urlencode?@muss只是想知道python 3.3需要它吗?@muss我更新了您的示例以用于python 3.5。它也应该与python 3.3一起使用。。。只需导入urllib.parse,然后使用
urllib.parse.quote\u plus
等。