Python 在重定向的asp窗体上使用urllib2时出错500
因此,如果我直接转到地址,它会重定向,并加载我想要的页面,但如果我尝试使用下面的代码执行此操作,它会给出错误代码500Python 在重定向的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 =
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()