代码之家  ›  专栏  ›  技术社区  ›  user1641071

url中的空格

  •  1
  • user1641071  · 技术社区  · 10 年前

    我正在尝试访问包含空格的url:

    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()
    

    问题在于“内容类型”分隔符中的空格 将字符串转换为两个不同的块。

    如何发送此请求?

    4 回复  |  直到 10 年前
        1
  •  3
  •   user1641071    10 年前

    谢谢各位,

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

    url_string.replace (" ","%20")
    
        2
  •  2
  •   user1907906 user1907906    10 年前

    使用 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)
    
        3
  •  2
  •   msvalkon    10 年前

    因为其他答案要么使用python2.x,要么使用urllib,并且问题被标记为 urllib3 ,这是一个与 urllib3 在python 3.x上。

    这个 request 将为您编码url。如果出于某种原因需要手动执行此操作,可以在 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)
    
        4
  •  1
  •   ssut    10 年前
    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