Очистите веб-страницу, которая требует, чтобы они сначала дали вам файл cookie сессии - PullRequest
5 голосов
/ 18 марта 2012

Я пытаюсь вычеркнуть файл Excel из правительственной базы данных о проверке. Тем не менее, URL-адрес, который я должен получить доступ к этому файлу Excel:

http://nrega.ap.gov.in/Nregs/FrontServlet?requestType=HouseholdInf_engRH&hhid=192420317026010002&actionVal=musterrolls&type=Normal

требует, чтобы к запросу был прикреплен файл cookie сеанса с правительственного сайта.

Как я могу получить cookie-файл сеанса с первоначальным запросом на целевую страницу (когда они предоставляют вам cookie-файл сеанса), а затем использовать его для перехода по указанному выше URL-адресу, чтобы получить наш файл Excel? Я использую Python в Google App Engine.

Я пробовал это:

import urllib2
import cookielib

url = 'http://nrega.ap.gov.in/Nregs/FrontServlet?requestType=HouseholdInf_engRH&hhid=192420317026010002&actionVal=musterrolls&type=Normal'


def grab_data_with_cookie(cookie_jar, url):
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
    data = opener.open(url)
    return data

cj = cookielib.CookieJar()

#grab the data 
data1 = grab_data_with_cookie(cj, url)
#the second time we do this, we get back the excel sheet.
data2 = grab_data_with_cookie(cj, url)

stuff2  = data2.read()

Я уверен, что это не лучший способ сделать это. Как я могу сделать это более чисто, или даже с помощью библиотеки запросов?

Ответы [ 2 ]

11 голосов
/ 18 марта 2012

Использование запросов Это тривиальная задача:

>>> url = 'http://httpbin.org/cookies/set/requests-is/awesome'
>>> r = requests.get(url)

>>> print r.cookies
{'requests-is': 'awesome'}
3 голосов
/ 18 марта 2012

Использование файлов cookie и urllib2:

import cookielib
import urllib2

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# use opener to open different urls

Вы можете использовать один и тот же консервный нож для нескольких соединений:

data = [opener.open(url).read() for url in urls]

Или установить его глобально:

urllib2.install_opener(opener)

В последнем случае остальная часть кода выглядит одинаково с поддержкой куки или без нее:

data = [urllib2.urlopen(url).read() for url in urls]
...