2

我正在尝试使用cURL成功POST到 ASPX ( ASP.NET ) 页面(外部站点)。

因为我不太关心页面的外观(这一切都在服务器端完成),所以我没有发送任何参数 __VIEWSTATE__EVENTVALIDATION__EVENTTARGET__EVENTARGUMENT,甚至不是空的,但我确实发送了真实数据。

将这些参数发布到 ASP.NET 服务器有多重要?

我不是 ASP.NET 程序员,但我可能怀疑这__EVENTVALIDATION可能会给我带来一些困难(?)。或者这是浏览器和服务器之间我不需要太关心的东西?

如果这很关键,我如何模仿这些变量以便服务器接受 POSTS?

4

2 回答 2

3

通常,您无法消除这些值。

ViewState 和 EventValidation 很关键——除非对方禁用了它们。如果对方使用它们并且在回发时没有找到它们,则会出现抛出错误,这取决于程序如何处理它。

ViewState 包含回发后页面需要使用的信息。

EventValidation 包含一个验证回发控件的键,以确保您不会尝试触发任何没有权限的命令,或发送任何没有运行权限的参数。

让我们举个例子:假设我有一个发送数字 43 的控件和一个触发回发的按钮,我询问 id 43 的信息。EventValidation 会注意您不能编写脚本并询问对于具有任何 id 的所有数字,并获得您可能认为的任何结果。

于 2012-04-18T01:22:56.263 回答
1

有可能的。只是没有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()
于 2013-06-13T11:54:29.370 回答