向aspx pag提交post请求

2024-10-06 11:37:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在https://searchlight.cluen.com/E5/CandidateSearch.aspx有一个ASPX页面,上面有一个表单,我想提交它并解析以获取信息。在

使用Python的urllib和urllib2,我创建了一个带有适当头和用户代理的post请求。但不包含预期的结果。我是误解了还是遗漏了一些明显的细节?在

    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()

关于这个主题,有几个问题很有帮助(比如how to submit query to .aspx page in python),但是我还是坚持这个问题,如果可能的话,我会要求更多的帮助。在

生成的html页面显示我可能需要登录,但是aspx页面显示在我的浏览器中,没有任何登录。在

以下是info()的结果:

Connection: close Date: Tue, 07 Jun 2011 17:05:26 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Length: 1944


Tags: httpsimportcomapplicationwindowshtml页面open
2条回答

我尝试了mechanize和urllib2,mechanize可以更好地处理cookies。我可以通过使用mechanize指定以下内容来提交表单:

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

不需要手动复制post请求,在本例中,mechanize能够处理依赖javascript的表单。在

在ASP.Net使用一个安全功能,防止embedding specific information in it.对ViewState进行篡改

很有可能的是,服务器拒绝了您的请求,因为ViewState被视为被篡改了。我不能绝对肯定地说,但是ASP.Net在框架中内置的several security features可能会阻止直接发布。在

如果涉及到会话,那么您也需要考虑到这一点。要模拟浏览器正在执行的操作,您需要执行以下步骤:

  1. 请求页面。在
  2. 将cookies集合保存到变量。在
  3. 将ViewState提取到变量。在
  4. 使用适当的表单值进行Post,同时传递保存的cookie和ViewState信息以及请求。在

我知道有很多工作,但不太难。同样,这可能不是您的问题的唯一来源,但它是值得阅读的,以便开始故障排除。在

相关问题 更多 >