Python HTTP请求URL结束斜杠

时间:2014-12-02 11:40:08

标签: python python-requests

我在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

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

1 个答案:

答案 0 :(得分:1)

您的服务器出现故障,而不是requests库。

HTTP RFC在section 3.2.2中声明:

  

如果URL中没有abs_path,则必须将其作为" /"当用作资源的Request-URI时

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

除了将requests源代码修补到remove the default value for the path portion of a URL之外,没有解决方法。这必须在other locations too中完成;我没有进行详尽的搜索。