网址中的空格

时间:2014-07-09 07:36:15

标签: python python-3.x urllib3

我试图访问带空格的网址:

url_string = "http://api.company.com/SendMessageXml.ashx?SendXML=<company><User><Username>username</Username><Password>passweord</Password></User><Content Type=sms>.."
with urllib.request.urlopen(url_string) as url:
    s = url.read()

问题在于&#34;内容类型&#34;中隔离 字符串到两个不同的块。

如何发送此请求?

4 个答案:

答案 0 :(得分:2)

使用urllib.parse.urlencode

import urllib.parse
query = urllib.parse.urlencode({
  "SendXML":
  "<company><User><Username>username</Username><Password>passweord</Password></User><Content Type=sms>.."
})
urllib.request.urlopen(query)

答案 1 :(得分:2)

因为其他答案是使用python 2.x或urllib并且问题被标记为urllib3,所以这是一个在python 3.x上使用urllib3的版本。

request将为您编码网址。如果由于某种原因需要手动执行此操作,可以在urllib3.request.urlencode中找到它。

>>> params = {'SendXML': '<company><User><Username>username</Username><Password>passweord</Password></User><Content Type=sms>'}
>>> url = "http://api.company.com/SendMessageXml.ashx"
>>> http = urllib3.PoolManager()
>>> r = http.request('GET', url, params)

答案 2 :(得分:2)

谢谢你们,

我发现了另一个(疯狂但有效)的解决方案:

url_string.replace (" ","%20")

答案 3 :(得分:1)

import urllib.parse, urllib.request

params = { "SendXML": "<company><User><Username>username</Username><Password>passweord</Password></User><Content Type=sms>.." }
url_string = "http://api.company.com/SendMessageXml.ashx?%s" % (urllib.parse.urlencode(params))
s = ""
with urllib.request.urlopen(url_string) as url:
    s = url.read()

print s