Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Веб-разработка и фреймворки > Подскажите библиотеку для работы с HTTP


Автор: spyswamp 17.7.2012, 17:13
Привет. Сразу оговорюсь, что в python и работе с веб-ресурсами и новичок. Однако раз придумал себе задачу, то надо ее решать. Суть простая: пообщаться с http-сервисом. Я отправляю запрос - сервис мне возвращает ответ в виде XML. Проблема в том, что на сервере есть авторизация, которая проходится так же запросом к нему.

Вот что у меня получилось:
Код

import sys
import httplib

# auth

conn = httplib.HTTPConnection("192.168.3.177:8060")
conn.request("GET", "/rest-service/auth-v1/login?userName=slava&password=12345")
response = conn.getresponse()
print response.status, response.reason, response.read()

cookies = response.getheader("set-cookie")
print cookies

# work

conn.request("GET", "/rest-service/reviews-v1/MO-248/comments/general")
response = conn.getresponse()
print response.status, response.reason


Вывод такой:
Код

200 OK <?xml version="1.0" encoding="UTF-8" standalone="yes"?><loginResult><token>slava:1:8ad8e445edff0b3f728e05db87f66145</token></loginResult>
remember=;Path=/;Expires=Thu, 01-Jan-1970 00:00:00 GMT;HttpOnly, crucibleprefs1="D%3D1342534102239";Path=/;Expires=Wed, 17-Jul-2013 14:08:22 GMT, FESESSIONID=ia04m9x13zvaxqzhgv8yg8y7;Path=/;HttpOnly
403 Forbidden


Я так понимаю, что мне как-то надо запомнить этот token? Чтобы дальше через него работать. Или cookie? Потому что на второй запрос вылазит 403, т.е. авторизацию как ветром сдуло. Ну, или если я прям совсем туплю, то поясните криком прямо в лицо! А, может, и посоветуйте либу, которая делает такие вещи автоматически.

Заранее спасибо.

Автор: spyswamp 18.7.2012, 14:40
Прочитал, что httplib - это прошлый век, и заюзал urllib2.
Чуть-чуть поучил python и переписал немного тестовый скрипт:

Код

import sys
import urllib
import urllib2
import re
 
crucible_url = 'http://192.168.3.177:8060'
 
def crucible_auth(user, password):
     """ authorization on crucible """
     print "Logging in..."
     params = urllib.urlencode({'userName' : user, 'password' : password})
     req = urllib2.Request(crucible_url + '/rest-service/auth-v1/login', params)
     f = urllib2.urlopen(req)
     cookie = unicode(f.headers['Set-Cookie'], 'utf-8')
     matches = re.findall('(?si)FESESSIONID=(.*?);', cookie)
     session_id = matches[0]
     print "Logged on, session id = ", session_id
     return session_id
 
def send_request(session_id, service_url):
     """ sending request to crucible rest api """
     req = urllib2.Request(crucible_url + service_url)
     req.add_header("Cookie", "FESESSIONID=" + session_id + ";")
     f = urllib2.urlopen(req)
     return f.read()
 
def main():
     session_id = crucible_auth('slava', '12345')
     content = send_request(session_id, '/rest-service/reviews-v1/MO-248/comments/general')
     print content
 
if __name__ == "__main__":
    main()

Автор: Karadul 23.7.2012, 01:30
requests
grab

Код

from grab import Grab

grab = Grab()
resp = grab.go("http://httpbin.org/post", post={u'превед':u'медвед'}, proxy="loopback:9050", proxy_type="socks5")
print resp.body
print resp.cookies

Автор: spyswamp 25.7.2012, 13:49
Karadul, из стандартной поставки, не?

Автор: Karadul 25.7.2012, 17:31
spyswamp, не, и чо? Инсталл скрипт в руки.

Автор: bilbobagginz 1.8.2012, 20:23
urllib2, httplib2 тоже катят хорошо. поддерживает разные виды авторизации, https, и т.д.


Автор: Karadul 2.8.2012, 02:03
Ага, только стиль жавоидный, суем один обьект другому, другой третьему, на второй раз без примера и бутылки опять не разберешься. А в грабе любой запрос делается одним вызовом.

Автор: gomer999999999 3.2.2013, 23:45
Добрый день.
Предлагаем к рассмотрению и тестированию наш проект - Маркетер Плагин.
Продвигаем его успешно во всем мире. Но только 27 января 2013 предоставили в Рунете к тестированию русифицированный плагин с русифицированным интерфейсом. Вся подробная информация наhttp://www.marketerplugin.ru/ 
Предлагаем протестировать наш плагин на только что русифицированном интерфейсеhttp://www.marketerplugin.ru/test_plagina.
В двух словах: плагин предназначен для создания сайтов-визиток и страниц продаж.
Ждем ваших комментариев, отзывов и критики.
Так же будем рады видеть вас на наших страницах в соц сетях
http://www.facebook.com/pages/Marketer-plugin/5288148..
http://vk.com/club46912629
Успехов и новых впечатлений.
С уважением, Богдан

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)