我正在尝试实现一个成功的POST到一个ASPX (ASP.NET)页面(一个外部网站)使用cURL。
因为我不太关心页面的外观(都是在服务器端完成的),所以我不会发送任何参数__VIEWSTATE、__EVENTVALIDATION、__EVENTTARGET和__EVENTARGUMENT,甚至不会为空,但我会发送真实的数据。
将这些参数发布到ASP.NET服务器有多重要?
我不是ASP.NET程序员,但我可能怀疑__EVENTVALIDATION可能会在这里给我带来一些困难(?)。或者这是浏览器和服务器之间的东西,我不需要太在意?
如果这很重要,我如何模仿这些变量才能让服务器接受帖子呢?
发布于 2012-04-18 09:22:56
通常,您不能消除这些值。
ViewState和EventValidation是关键-除非另一端已将其禁用。如果另一端使用它们,但在回发时找不到它们,则会出现一个抛出错误,这取决于程序如何处理它。
ViewState包含页在回发后需要使用的信息。
EventValidation包含一个键,用于验证回发控件,以确保您不会尝试触发任何没有权限的命令,也不会发送任何没有运行权限的参数。
让我们给你一个例子:假设我有一个发送数字43的控件和一个触发回发的按钮,我请求id 43的信息。EventValidation会注意到,您不能编写脚本并要求具有任何id的所有数字,并获得您可能认为的任何结果。
发布于 2013-06-13 19:54:29
这是可能的。只是不是和cURL。
最好的方法是使用浏览器模拟器,比如Python中的mechanize。这是一个示例脚本。试一试。您可以随时使用命令行调用此脚本,并让它返回结果HTML。
import mechanize
import cookielib
# 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 it does not hang on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
# Want debugging messages?
#br.set_debug_http(True)
#br.set_debug_redirects(True)
#br.set_debug_responses(True)
# 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')]
# Open some site, let's pick a random one, the first that pops in mind:
r = br.open('http://www.example.com/')
html = r.read()
# Show the source
print html
# or
print br.response().read()
# Show the HTML title
print br.title()
# Show the response headers
print r.info()
# or
print br.response().info()
# Show the available forms
for f in br.forms():
print f
# Select the first (index zero) form
br.select_form(nr=0)
# Let's search
br.form['field']='value'
br.submit()
# Show HTML of results
print br.response().read()https://stackoverflow.com/questions/10201264
复制相似问题