Python 在重定向的asp窗体上使用urllib2时出错500

Python 在重定向的asp窗体上使用urllib2时出错500,python,urllib2,urllib,Python,Urllib2,Urllib,因此,如果我直接转到地址,它会重定向,并加载我想要的页面,但如果我尝试使用下面的代码执行此操作,它会给出错误代码500 import urllib, urllib2 import sys if len(sys.argv) > 1: molecule = sys.argv[1] else: print "Error: no molecule requested" sys.exit() # Created handler redirectionHandler =

因此,如果我直接转到地址,它会重定向,并加载我想要的页面,但如果我尝试使用下面的代码执行此操作,它会给出错误代码500

import urllib, urllib2

import sys

if len(sys.argv) > 1:
    molecule = sys.argv[1]
else:
    print "Error: no molecule requested"
    sys.exit()

# Created handler
redirectionHandler = urllib2.HTTPRedirectHandler() 

# 2 apply the handler to an opener
opener = urllib2.build_opener(redirectionHandler)

# 3. Install the openers
urllib2.install_opener(opener)


request = urllib2.Request("http://cccbdb.nist.gov/getform.asp", data=urllib.urlencode({'formula':molecule, "submit1": "Submit"}))
response = urllib2.urlopen(request)
通过执行类似于python program.py ch4的操作来使用该程序,它将抛出错误。然而,仅仅访问链接就可以了

比如说

我想做的是,在第页填写表单,然后加载结果页。该页面包含以下内容:

<FORM action="getform.asp" method=POST id=form1 >
<INPUT type="text" id=text1 name=formula
VALUE='CH4'
></P>
<INPUT type="submit" value="Submit" id=submit1 name=submit1>
</FORM>

是否有为表单注册的
onSubmit
处理程序?这可能是一种有效的CSRF保护。此外,填写表单并检查发送到服务器的数据,我看到请求方法是随公式参数一起传递的
POST
submit1:Submit
。尝试添加
'submit1':将
提交到数据字典,并确保使用
POST
方法请求数据。@JOHN i刚刚将“submit1”:“Submit”添加到发送的字典中,它仍然会给出相同的错误。CSRF如何检测我使用的是浏览器还是python?CSRF是一种攻击技术。解决CSRF攻击风险的一种可能方法是检查
Referer
http头,或者在运行时将一些令牌嵌入表单。如果
Referer
或令牌与服务器期望的不匹配,服务器将拒绝请求。但在这种情况下,我不会抛出500个错误,因此不太可能使用CSRF保护。我认为您的代码很可能使用了
GET
方法,而服务器需要
POST
。还有一个可能的错误源:
getform.asp
重定向到
geom2.asp
,根本没有参数。所有传递到
geom2.asp
的都是
ASPSESSIONIDACARDBQT
cookie。所以,您可能需要将cookie jar处理程序添加到urllib请求中。
import mechanize
import cookielib
from BeautifulSoup import BeautifulSoup
import html2text

import sys


if len(sys.argv) > 1:
    molecule = sys.argv[1]
else:
    print "Error: no molecule requested"
    sys.exit()


# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
#br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

# The site we will navigate into, handling it's session
br.open('http://cccbdb.nist.gov/geom1.asp')

# Select the first (index zero) form
br.select_form(nr=0)

br.form["formula"] = molecule

br.submit()