HTTP 响应 403。是我的 Apache 配置问题还是我的 Python 对 URL 的 enoding 问题?
Posted
技术标签:
【中文标题】HTTP 响应 403。是我的 Apache 配置问题还是我的 Python 对 URL 的 enoding 问题?【英文标题】:HTTP response 403. Is the problem with my Apache config or my Python enoding of the URL? 【发布时间】:2021-02-07 04:54:20 【问题描述】:当我访问时
http://my_site.com/api/my_project/submitSearch.php?skills=C+OR+%28C%2B%2B+AND+UML%29
我收到 403 的 HTTP 响应。
重点是我在 Python 中使用 urllib.parse.quote_plus()
编码 skill=C OR (C++ AND UML)
。
如果我使用skill=(C++ AND UML)
,那么没有问题。
http://my_site.com/api/my_project/submitSearch.php?skills=%28C%2B%2B+AND+UML%29
我只能假设 URL 触发了一些 Apache 配置规则。我询问了我的 ISP,他们的解决方案是允许从我当前的 IP 地址进行所有访问。但是,我想让每个人都可以访问这个 URL,那么我该如何配置我的 Apache 来允许这个呢?
或者,我是否在 Python 中错误地编码了我的 URL?奇怪的是,当我在 javascript 中使用encodeURIComponent()
时,服务器并没有拒绝请求。
所以,JS/Python 编码是
Python:http://localhost/api/enigma/submitSearch.php?skills=C+OR+%28C%2B%2B+AND+UML%29
JS: http://localhost/api/enigma/submitSearch.php?skills=C%20OR%20(C%2B%2B%20AND%20UML)
另外,问题出在我的 ISP 上,而不是在 localhost
【问题讨论】:
那么,python 和 javascript 编码的 uri 有何不同? 我会更新问题(感谢并支持您的评论)。 【参考方案1】:您可以尝试将.htaccess
文件添加到包含Apache 服务器相关目录中的内容的目录(甚至是您网站的根目录)中。这应该授予尝试访问该目录的任何人的访问权限。
Allow From All
Satisfy Any
AllowOverride
你甚至可以像这样包装这些指令:
<Directory "/path/to/mysubdirectory">
Allow from All
Satisfy Any
AllowOverride
</Directory>
使其适用于给定的目录。
【讨论】:
【参考方案2】:我对 Apache 不熟悉,所以无法为您提供帮助。
要获得与 JavaScript 的 encodeURIComponent
相同的输出,请尝试使用 urllib.parse.urlencode
和 urllib.parse.quote
(而不是 quote_plus
)。
query = "skills": "C OR (C++ AND UML)"
query_string = urllib.parse.urlencode(query, safe="-_.!~*'()", quote_via=urllib.parse.quote)
print(query_string)
skills=C%20OR%20(C%2B%2B%20AND%20UML)
【讨论】:
谢谢。它仍在本地主机上工作,但我的 ISP 失败了,但至少 JS 和 Python 现在都生成了相同的编码 URL 所以即使使用skills=C%20OR%20(C%2B%2B%20AND%20UML)
,您仍然会得到 403?
是的,唉,我愿意 :-(以上是关于HTTP 响应 403。是我的 Apache 配置问题还是我的 Python 对 URL 的 enoding 问题?的主要内容,如果未能解决你的问题,请参考以下文章