0

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

一切都很好

4

2 回答 2

0

python 2的解决方案: 如何在python中规范化URL

python 3的解决方案:

马不解的解决方案>

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

在php端,

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

于 2013-07-16T03:18:08.497 回答
0

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

于 2013-07-16T02:30:36.873 回答