requests.get(url) return 来自 kubernetes api 的错误代码 404 而可以通过 curl/GET 获得响应

requests.get(url) return error code 404 from kubernetes api while the response could be get via curl/GET

我在 kubernetes api

上使用 requests.get() 遇到了问题
url = 'http://10.69.117.136:8080/api/v1/namespaces/"default"/pods/tas-core/'
json = requests.get(url)
print json.content

错误代码 404 将返回为: {"kind": "Status","apiVersion": "v1","metadata": {},"status": "Failure","message": "pods \"tas-core\"未找到","reason": "NotFound","details": {"name": "tas-core","kind": "pods"},"code": 404}

但是如果我使用GET/curl,响应可以成功返回:

curl http://10.69.117.136:8080/api/v1/namespaces/"default"/pods/tas-core/

{"kind": "Pod","apiVersion": "v1","metadata": {"name": "tas-core","namespace":"default","selfLink": "/api/v1/namespaces/default/pods/tas-core","uid": "a264ce8e-a956-11e5-8293-0050569761f2","resourceVersion": "158546","creationTimestamp": "2015-12-23T09:22:06Z","labels": {"app": "tas-core"},"annotations": {"ctrl": "dynamic","oam": "dynamic"}},"spec": {"volumes":[ ...

进一步缩短url效果很好

url = 'http://10.69.117.136:8080/api/v1/namespaces/'
json = requests.get(url)
print json.content

{"kind":"NamespaceList","apiVersion":"v1","metadata":{"selfLink":/api/v1/namespaces/ ","resourceVersion":"220452"},"items":[{"metadata":{"name":"default","selfLink":"/api/v1/namespaces/默认","uid":"74f89440-a94a-11e5-9afd-0050569761f2","resourceVersion":"6","creationTimestamp":"2015-12-23T07:54:55Z "},"spec":{"finalizers":["kubernetes"]},"status":{"phase":"Active"}}]}

我哪里错了?

requests 和命令行发出请求将其发送到不同的 urls。

来自 Python 代码的 requests 请求确实尝试使用 url 包括引号。

curl 从命令行删除引号(在其他情况下它会转义引号)。

我无法测试您的真实请求 url,但我想,以下方法可能有效:

url = 'http://10.69.117.136:8080/api/v1/namespaces/default/pods/tas-core/'
json = requests.get(url)
print json.content