Python HTTP 请求 URL 结束斜杠



我在 Python 中使用 requests 模块,似乎遇到了在 URL 后添加尾部斜杠的问题。我尝试使用不同的方法(替换,正则表达式)删除它,但它似乎没有任何区别。出于隐私原因,一些细节已被替换显然:)

url = 'http://example.com:8000'
payload = {}
payload['summary'] = "test"
payload['service'] = 10
payload['template'] = 'XXX11112222'
payload['user_name'] = 'john_smith'
payload['justification'] = 'required'
payload['start_date'] = '1417737600'
payload['end_date'] = '1417759200'
r = requests.post(url, params=payload)
print(r.url)

打印的 URL 是这样的。

http://X.X.X.X:8000/?end_date=1417759200&business_justification=required&service=10&summary=test&template=XXX11112222&user_name=john_smith&start_date=1417737600

并给了我这个回应。

200
400 No requested_service or service Parameter Provided

当我抓取该 URL 并将其放入浏览器中并在'?'之前删除'/'时,它工作正常。例如:http://example.com:8000?....有效,但http://example.com:8000/?...无效。但是我无法弄清楚如何在 Python 脚本中删除 URL 上的尾部斜杠。

您的服务器在这里有问题,而不是requests库。

HTTP RFC 在第 3.2.2 节中指出:

如果 URL 中不存在该abs_path,则在用作资源的请求 URI 时,必须将其指定为"/"

没有路径的 URL(例如 http://X.X.X.X:8000 )没有绝对路径组件,因此根据标准将其设置为/。如果您的服务器在没有给出路径时响应不同,则违反了该标准。

除了修补requests源代码以删除 URL 路径部分的默认值之外,没有解决此问题的方法。这也必须在其他地方完成;我没有做详尽的搜索。

最新更新