2

cURLを使用してASPX(ASP.NET)ページ(外部サイト)へのPOSTを成功させようとしています。

私はページの見た目をあまり気にしないので(すべてサーバー側で行われます)、引数、、、、、を送信 __VIEWSTATEしません。空でもありませんが、実際のデータは送信します__EVENTVALIDATION__EVENTTARGET__EVENTARGUMENT

これらの引数をASP.NETサーバーにPOSTすることはどれほど重要ですか?

私は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 に答える