Я делаю запрос GET в OrientDB через их HTTP API, который, кажется, возвращает 3 разных результата с тремя вышеупомянутыми модулями.Запросы/httplib/urllib return 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 [email protected]; 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 [email protected]; 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 из браузера возвращает ожидаемые результаты, то же самое сделали запросы.
Я также пытался играть немного с заголовками, не помогло ....
Я не могу сказать, если что-то не так с
- Мой код
- АНИ
- меня непонимание цели каждого модуля, и, следовательно, злоупотребляя их
Итак, почему это, что все три ПБУ les возвращают три разных результата, и как мне сделать httplib & urllib возвращает правильные результаты?
Спасибо!
Edit -
После прочтения this (спасибо Дано), я прошел 401 ответ с httplib2 вручную путем добавления заголовков проверки подлинности запроса.
Однако httplib по-прежнему возвращает тот же самый ответ urllib делает - странный отклик с id = -2, что ничего не значит. Запросы все еще возвращают фактические результаты.
Почему только запросы, которым удается получить фактические результаты?
Итак, это улучшение. Теперь httplib передает часть auth и возвращает тот же самый ответ, что и urllib - странный ответ с id = -2. Почему запросы справляются с правильным результатом, а httplib & urllib - нет? – thomas
О, мужчина, я полностью пропустил вторую часть вашего ответа. Пробелы были причиной! Вручную заменяя их% 20, я получаю правильный ответ с помощью httplib & urllib. request_encode_url не помог, я проверю, почему – thomas
@thomas Cool, рад, что у вас это работает. Действительно, это просто похоже на то, чтобы всегда использовать «запросы» в качестве вашего HTTP-клиента. :) – dano