【问题标题】:Build HTTP GET request with port number and parameters使用端口号和参数构建 HTTP GET 请求
【发布时间】:2011-02-13 15:49:00
【问题描述】:

我正在尝试做一件非常简单的事情,为包含端口号和一些参数的 get 请求构建一个 URL,因为它遵循http://localhost:8080/read?date=whatever

我尝试了几种方法都没有成功,应该不会太难,但我想不出一个解决方案。

希望有人帮助我,不胜感激

提前致谢

【问题讨论】:

    标签: python http get request


    【解决方案1】:

    之前的答案不是您实际提出的问题。试试这个:

    import urllib
    
    myPort = "8080"
    myParameters = { "date" : "whatever", "another_parameters" : "more_whatever" }
    
    myURL = "http://localhost:%s/read?%s" % (myPort, urllib.urlencode(myParameters)) 
    

    基本上,urllib 有一个函数可以做你想做的事,称为 urlencode。将包含所需参数/参数值对的字典传递给它,它将在“?”之后生成您需要的正确参数字符串在您的网址中。

    【讨论】:

    • 嘿,我确实尝试过类似的解决方案。问题是即使正确构建了 url,我也会收到此错误:httplib.InvalidURL: nonnumeric port: '8080/read?initialDate=whatever' 有没有其他方法可以使用不同的库或其他方法来做到这一点?还是谢谢!
    【解决方案2】:

    这是一个您可以(重)使用的简单泛型类:

    import urllib
    class URL:
        def __init__(self, host, port=None, path=None, params=None):
            self.host = host
            self.port = port
            self.path = path
            self.params = params
    
        def __str__(self):
            url = "http://" + self.host
            if self.port is not None:
                url += ":" + self.port
            url += "/"
            if self.path is not None:
                url += self.path
            if self.params is not None:
                url += "?"
                url += urllib.urlencode(self.params)
            return url
    

    所以你可以这样做:

    url = URL("localhost", "8080", "read", {"date" : "whatever"})
    print url
    

    【讨论】:

      【解决方案3】:
      data = urllib2.urlopen(url).read()
      

      【讨论】:

      • 拜托,你能提供一个更详细的答案吗?我是 python 新手,我想看看它是如何一步一步完成的。谢谢
      • 请检查包含足够示例的现有 Python 文档:docs.python.org/library/urllib2.html
      猜你喜欢
      • 1970-01-01
      • 2015-02-03
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      相关资源
      最近更新 更多