- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在通过他们的 HTTP API 向 OrientDB 发出 GET 请求,这似乎使用上述 3 个模块返回了 3 个不同的结果。
uri = 'http://localhost:2480/query/Test1/sql/Select from Person'
# Requests
import requests
r = requests.get(uri, auth = ('root', 'root'))
print r.status_code #200
r.json() # Returns the results from the query, all good
# httplib2
import httplib2
h = httplib2.Http()
h.add_credentials('root', 'root')
r = h.request(uri = uri, method = 'GET')
print r
#this returns status 200, but the response itself says 401 unauthorized.
#({'content-location': 'http://localhost:2480/query/Test1/sql/Select from Person',
# 'status': '200'},
# 'from 401 Unauthorized\r\nCache-Control: no-cache, no-store, max-age=0, must-revalidate\r\nPragma: no-cache\r\nDate: Fri Jun 26 10:45:26 IDT 2015\r\nContent-Type: text/plain; charset=utf-8\r\nServer: OrientDB Server v.2.0.8 (build UNKNOWN@r; 2015-04-22 20:47:49+0000)\r\nConnection: Keep-Alive\r\nWWW-Authenticate: Basic realm="OrientDB db-Test1"\r\nSet-Cookie: OSESSIONID=-; Path=/; HttpOnly\r\nContent-Length: 17\r\n\r\n401 Unauthorized.')
# This however returns the correct result, meaning we are authorized!
h.request(uri = 'http://localhost:2480/document/Test1/12:0',
method = 'GET')
#urllib3
import urllib3
http = urllib3.PoolManager()
headers = urllib3.util.make_headers(basic_auth = 'root:root')
r = http.request('GET', uri, headers = headers)
print r.data
# This returns some weird response, definitely not what I got with requests module.
# This isn't the expected from my query either
# 'from 200 OK\r\nCache-Control: no-cache, no-store, max-age=0, must-revalidate\r\nPragma: no-cache\r\nDate: Fri Jun 26 10:51:23 IDT 2015\r\nContent-Type: application/json; charset=utf-8\r\nServer: OrientDB Server v.2.0.8 (build UNKNOWN@r; 2015-04-22 20:47:49+0000)\r\nConnection: Keep-Alive\r\nSet-Cookie: OSESSIONID=OS1435305083836-80491934664057070; Path=/; HttpOnly\r\nContent-Length: 54\r\n\r\n{"result":[{"@type":"d","@rid":"#-2:0","@version":0}]}'
# This however returns actual results
http.request('GET', 'http://localhost:2480/document/Test1/12:0', headers = headers)
我真的不知道这里发生了什么。从浏览器运行 sql 查询请求返回预期结果,与请求所做的相同。
我也试着玩了一下标题,没有帮助....
我分不清是不是有问题
那么,为什么三个模块都返回三个不同的结果,如何让httplib和urllib返回正确的结果呢?
谢谢!
编辑-
看完this (感谢 dano),通过手动向请求添加身份验证 header ,我通过了 httplib2 的 401 响应。
但是 httplib 仍然返回与 urllib 完全相同的响应 - id = -2 的奇怪响应,这没有任何意义。请求仍然返回实际结果。
为什么只有 Requests 能够获得实际结果?!
最佳答案
我认为您在 httplib2
中看到的是 actually by design ;当您提供凭据时,httplib2
不会在其第一个请求中将它们传递给服务器。如果服务器返回 401 状态,它将使用包含的凭据再次尝试。由于看起来您正在返回 200 状态(尽管消息说它是 401),它可能没有发送信用。您可以尝试通过手动将凭据添加到请求 header 来解决此问题:
import base64
import httplib2
h = httplib2.Http()
auth = base64.encodestring( 'root' + ':' + 'root' )
r = h.request(uri, method='GET',
headers = {'Authorization' : 'Basic ' + auth}
)
我不是 100% 确定,但我的猜测是 urllib3
问题是由于您的 uri 中的空格引起的。查看它是否适用于 http.request_encode_url
而不是 http.request
。
关于python - requests/httplib/urllib 返回 3 个不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31068075/
“AAaarg”!请帮忙!!! 这是我正在尝试做的... 我有一个 Django 站点 site1,它需要访问另一个服务 site2 的 API。然而,为了做到这一点,site1 需要使用它自己的登录
以下代码引发错误“socket.gaierror: [Errno -2] Name or service not known”。 import httplib, urllib attrs = urll
我正在尝试获取似乎重定向不止一次的页面的最终 URL。在您的浏览器中尝试这个示例 URL,并将其与我的代码片段底部的最终 URL 进行比较: Link that redirects more than
我有一个在端口 6868 上运行的本地服务器。从技术上讲,它是使用 Express 构建的由 Node.js 驱动的微型站点。它实际上有一个“/push” Controller 读取一些数据并写入控制
我使用带有私钥的httplib.HTTPSConnection: h = httplib.HTTPSConnection(url, key_file='../cert/priv.pem', cert_
我有以下代码要使用: def createCon(host,auth): con = httplib.HTTPSConnection(host) return con def _rea
我有一个脚本,它使用 Python 中的 httplib 获取互联网上很多页面的 HTTP header 。 我的问题是关于 specific domain (可能还有其他人),httplib 引发异
我正在尝试使用 httplib 将信用卡信息发送到 authorize.net。当我尝试发布请求时,我得到以下回溯: File "./lib/cgi_app.py", line 139, in run
我正在尝试弄清楚如何通过代理将数据发送到服务器。我希望这可以通过 tor 实现,但是因为 tor 使用 SOCKS,所以使用 httplib 显然不可能(如果我错了请纠正我) 这是我现在拥有的 imp
我正在使用 python 为 elgg 编写一个 REST 客户端,即使请求成功,我也会得到以下响应: Traceback (most recent call last): File "testc
我正在实现一个从各种服务器获取网页的小服务。我需要能够配置不同类型的超时。我尝试过使用套接字的 settimeout 方法,但它并不完全符合我的要求。这是问题所在。 我需要指定初始 DNS 查找的超时
我正在使用 httplib 向服务器发布帖子。我正在拿回 303 See Other。我如何查看重定向消息“303 See Other”并没有真正帮助。 谢谢 conn1 = httplib.HTTP
问题是这样的: 我有一个 Django 网站。 我正在尝试使用 httplib 向站点发送 POST 请求。 当我尝试发送 POST 请求时,Django 需要 CSRF token 。 如何才能毫无
我想编写一个 python 脚本,它将请求 reddit 帖子 url,转到页面,使用指定帐户登录并为帖子点赞和注销。 A) 这可以用 python 完成吗? B) 我该怎么做?如果您可以提供很棒的代
我想使用 HTTPS 协议(protocol)从 python 的 httplib 库发送 Get 请求。 我已经浏览了多个答案,建议如何在使用 http 协议(protocol)时执行此操作,但它们
我正在使用 suds 0.3.6。创建 suds 客户端时,随机出现错误: httplib.py,_read_status(),第 355 行,类 httplib.BadStatusLine' 这是用
我发现 httplib.HTTPSConnection 不执行自动服务器证书检查。据我了解的问题,我需要手动添加该功能,例如通过按照描述对此类进行子类化 here . 由于我使用的是 Python2.
默认情况下,httplib 调试发送、 header 和回复信息作为 logger.info 返回, 如何将发送、 header 和重播显示为调试信息的一部分? import requests imp
我想通过 HTTP GET 请求将数据发送到我的服务器,每 1-2 秒一次。 我应该每次都创建一个新连接,还是应该保持连接打开并继续通过同一连接发送请求?如果我采用后一种方法,httplib 会保持连
httplib.HTTPException 是否有错误代码?如果是这样,我如何从异常实例中获取它们?感谢您的帮助。 最佳答案 httplib 模块不使用异常来传达 HTTP 响应,只是真正的错误(无效
我是一名优秀的程序员,十分优秀!