【发布时间】:2013-07-14 01:05:00
【问题描述】:
好吧,显然 python 3 在 urllib 方面非常可笑。
所以,我有一个这样的网址,格式如下,
http_request = "http://localhost/system/index.php/index_file/store?cid={0}&cname={1}&fname={2}&fdir='{3}'"\
.format(client_id, client_name, each[1], each[2])
其中each[1] 和each[2] 分别是文件名和文件目录。
所以 http_request 通过 print() 生成的结果会给出这样的结果,
http://localhost/system/index.php/index_file/store? \
cid=90823&cname=John Smith&fname=Sample Document.doc& \
fdir='C:\Users\williamyang\Desktop\Files\90823 Michelle Moore\Sample Document.doc'
(单独的反斜杠的目的是让它更适合这里。实际的代码在每行的末尾没有单独的反斜杠。)
如果我将该 URL 输入到浏览器中,那就太好了。 PHP 应用程序通过 $_GET 接收所有索引,然后转到 MySQL,没有问题。
但如果我让python来做,
PHP 告诉我索引 $_GET['fname'] 和 $_GET['fdir'] 不存在!!!多么疯狂。好的,那么,
我尝试了 urllib.parse、urllib 编码和解码、http_request.replace('\\', '/') 以及许多其他方法。
这些都不起作用。
我的教授曾经告诉我,python 在字符编码方面做了一些有趣的事情。
在所有疯狂和无用的 urllib 解析实验之前,这是我发送 URL 的方式
def getResponseCode(url):
conn = urllib.request.urlopen((url))
return conn.read()
在哪里url = http_request
我该如何解决这个问题?
PHP 说 $_GET['fname'] and $_GET['fdir'] 不存在
但是当我将自动生成的 http_request 粘贴到浏览器中时,
一切都好
【问题讨论】:
-
你能在发送之前
print repr(url)看看输出什么吗? -
'http://localhost/system/index.php/index_file/store?cid=90823&cname=Michelle Moore&fname=Sample Document.doc&fdir='C:\\Users\\williamyang\\Desktop\\Forms\\90823 Michelle Moore\\Sample Document.doc' -
对于双反斜杠我无能为力。 Python 3 只是拒绝我这样做。我在某处读到双反斜杠被解释为单个正斜杠。我认为这可能是问题所在。 replace('\\', '/') 也不是 replace('\\\\', '/') 有效
-
目录是使用os.walk()生成的。因此反斜杠
-
不,反斜杠应该没问题。这只是 Python 为 repr 转义了反斜杠,否则你将无法判断 '\n' 是换行符还是反斜杠和 'n'。
标签: php python mysql web-applications