【发布时间】:2011-02-13 15:49:00
【问题描述】:
我正在尝试做一件非常简单的事情,为包含端口号和一些参数的 get 请求构建一个 URL,因为它遵循http://localhost:8080/read?date=whatever
我尝试了几种方法都没有成功,应该不会太难,但我想不出一个解决方案。
希望有人帮助我,不胜感激
提前致谢
【问题讨论】:
我正在尝试做一件非常简单的事情,为包含端口号和一些参数的 get 请求构建一个 URL,因为它遵循http://localhost:8080/read?date=whatever
我尝试了几种方法都没有成功,应该不会太难,但我想不出一个解决方案。
希望有人帮助我,不胜感激
提前致谢
【问题讨论】:
之前的答案不是您实际提出的问题。试试这个:
import urllib
myPort = "8080"
myParameters = { "date" : "whatever", "another_parameters" : "more_whatever" }
myURL = "http://localhost:%s/read?%s" % (myPort, urllib.urlencode(myParameters))
基本上,urllib 有一个函数可以做你想做的事,称为 urlencode。将包含所需参数/参数值对的字典传递给它,它将在“?”之后生成您需要的正确参数字符串在您的网址中。
【讨论】:
httplib.InvalidURL: nonnumeric port: '8080/read?initialDate=whatever' 有没有其他方法可以使用不同的库或其他方法来做到这一点?还是谢谢!
这是一个您可以(重)使用的简单泛型类:
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
【讨论】:
data = urllib2.urlopen(url).read()
【讨论】: