Python 3规范化URL

时间:2013-07-16 01:24:35

标签: php python mysql web-applications

好吧,显然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]分别是文件名和文件目录。

因此通过print()生成的http_request结果会给出类似的结果,

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粘贴到浏览器中时,

一切都很好

2 个答案:

答案 0 :(得分:0)

网址不应包含空格。您的浏览器将自动对网址进行百分比编码,并根据网址转义规则,将%20+内不应包含在网址中的字符替换为quote_plusurllib.quote_plus。 Python不会自动执行此操作;最有可能的是,便利性引入了对编程很重要的模糊性,但不会打扰普通的Web用户。用于url转义的Python工具是urllib.quote and urllib.quote_plus;你可能想要{{1}}。在将URL粘贴到域名之前,将URL的路径组件传递给{{1}},您应该很高兴。

答案 1 :(得分:0)

python 2的解决方案: How can I normalize a URL in python

python 3的解决方案:

Ma wonky solution>

从os.walk()读取目录后立即执行var.replace(“”,“_”)

在php端,

$ var = str_replace('_','',$ _GET ['var']);