问题描述
当我访问
http://my_site.com/api/my_project/submitSearch.PHP?skills=C+OR+%28C%2B%2B+AND+UML%29
我收到403的HTTP响应。
关键是我正在使用skill=C OR (C++ AND UML)
在Python中编码urllib.parse.quote_plus()
。
如果我使用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来允许该URL?
或者,我是否在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
解决方法
您可以尝试将.htaccess
文件添加到包含Apache服务器相关目录中内容的目录(甚至网站的根目录)中。这应该将访问权限授予尝试访问该目录的任何人。
Allow From All
Satisfy Any
AllowOverride
您甚至可以像这样包装这些指令:
<Directory "/path/to/mysubdirectory">
Allow from All
Satisfy Any
AllowOverride
</Directory>
使其适用于给定目录。
,我对Apache不熟悉,所以在这里我无能为力。
要获得与JavaScript version: "3.8"
services:
influxdb:
image: influxdb
restart: unless-stopped
ports:
- 8086:8086
volumes:
- influxdb-volume:/var/lib/influxdb
networks:
- test
chronograf:
image: chronograf
restart: unless-stopped
ports:
- 8888:8888
volumes:
- chronograf-volume:/var/lib/chronograf
depends_on:
- influxdb
networks:
- test
volumes:
influxdb-volume:
chronograf-volume:
networks:
test:
driver: bridge
相同的输出,请尝试将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)