Отправка запроса на страницу aspx - PullRequest
9 голосов
/ 07 июня 2011

У меня есть страница ASPX на https://searchlight.cluen.com/E5/CandidateSearch.aspx с формой, которую я хотел бы отправить и проанализировать для получения информации.

Используя urllib и urllib2 в Python, я создал почтовый запрос с соответствующими заголовками и пользовательским агентом.Но полученный ответ html не содержит ожидаемой таблицы результатов.Я неправильно понимаю или упускаю какие-либо очевидные детали?

    import urllib
    import urllib2

    headers = {
        'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.13)         Gecko/2009073022 Firefox/3.0.13',
        'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml; q=0.9,*/*; q=0.8',
        'Content-Type': 'application/x-www-form-urlencoded'
    }
    # obtained these values from viewing the source of https://searchlight.cluen.com/E5/CandidateSearch.aspx
    viewstate = '/wEPDwULLTE3NTc4MzQwNDIPZBYCAg ... uJRWDs/6Ks1FECco='
    eventvalidation = '/wEWjQMC8pat6g4C77jgxg0CzoqI8wgC3uWinQQCwr/ ... oPKYVeb74='
    url = 'https://searchlight.cluen.com/E5/CandidateSearch.aspx'
    formData = (
        ('__VIEWSTATE', viewstate),
        ('__EVENTVALIDATION', eventvalidation),
        ('__EVENTTARGET',''),
        ('__EVENTARGUMENT',''),
        ('textcity',''),
        ('dropdownlistposition',''),
        ('dropdownlistdepartment',''),
        ('dropdownlistorderby',''),
        ('textsearch',''),
    )

    # change user agent
    from urllib import FancyURLopener
    class MyOpener(FancyURLopener):
        version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127         Firefox/2.0.0.11'

    myopener = MyOpener()

    # encode form data in post-request format
    encodedFields = urllib.urlencode(formData)

    f = myopener.open(url, encodedFields)
    print f.info()

    try:
      fout = open('tmp.htm', 'w')
    except:
      print('Could not open output file\n')

    fout.writelines(f.readlines())
    fout.close()

Есть несколько вопросов на эту тему, которые были полезны (например, как отправить запрос на страницу .aspx в python )но я застрял на этом и прошу дополнительной помощи, если это возможно.

Получившаяся html-страница говорит, что мне может потребоваться войти в систему, но страница aspx отображается в моем браузере без регистрации.

Вот результаты из info ():

Соединение: закрыть Дата: вторник, 07 июня 2011 г. 17:05:26 GMT Сервер: Microsoft-IIS / 6.0 X-Powered-By: ASP.NET X-AspNet-версия: 2.0.50727 Контроль кэша:закрытый Content-Type: text / html;charset = utf-8 Content-Length: 1944

Ответы [ 2 ]

7 голосов
/ 07 июня 2011

ASP.Net использует функцию безопасности, которая защищает от вмешательства в ViewState путем встраивания в него конкретной информации.

Скорее всего, сервер отклоняет ваш запрос, потому что ViewState обрабатывается так, как если бы он был подделан. Я не могу сказать это с абсолютной уверенностью, но ASP.Net имеет несколько функций безопасности , которые встроены в среду, которая может препятствовать прямой публикации.

Если сессия вообще задействована, то вам также необходимо это учесть. Чтобы смоделировать, что делает браузер, вам необходимо выполнить следующие шаги:

  1. Запросить страницу.
  2. Сохранить коллекцию файлов cookie в переменной.
  3. Извлечение ViewState в переменную.
  4. Отправить с соответствующими значениями формы, передавая вместе с запросом сохраненные файлы cookie и информацию ViewState.

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

2 голосов
/ 09 июня 2011

Я попробовал механизировать и urllib2, и механизировать лучше обрабатывает куки. Я могу отправить форму, просто указав с помощью mechanize:

    browser= mechanize.Browser()
    browser.select_form(form_name)
    browser.set_value("Page$Next", name="pagenumber")     

Не было необходимости реплицировать запрос на публикацию вручную, и механизация в этом случае смогла обработать форму, основанную на javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...