2011-07-21 10 views
0

これまで2日間HttpURLConnectionとsetRequestPropertyをやっていましたが、私はこのWebページを投稿して私が望むページを返すことができません。これはこれまで私が持っているものです...プログラムでASP型にPOSTするWEBPAGE

... 文字列データ= URLEncoder.encode( "acctno"、 "UTF-8")+ "=" + URLEncoder.encode( "1991462"、 "UTF -8 ")。

URL oracle = new URL("http://taxinquiry.princegeorgescountymd.gov"); 
    HttpURLConnection yc = (HttpURLConnection) oracle.openConnection(); 
    yc.setRequestMethod("POST"); 

    yc.setRequestProperty("Content-Type", "text/html; charset=utf-8"); 
    yc.setRequestProperty("Content-Length", "19004"); 
    yc.setRequestProperty("Cache-Control", "private"); 
    yc.setRequestProperty("Set-Cookie", "ASP.NET_SessionId=v5rdm145zv3jm545kdslgz55; path=/"); 
    yc.setRequestProperty("X-AspNet-Version", "1.1.4322"); 
    yc.setRequestProperty("X-Powered-By", "ASP.NET"); 
    yc.setRequestProperty("Server", "Microsoft-IIS/6.0"); 

    yc.setDoOutput(true); 
    yc.setDoInput(true); 

    OutputStreamWriter out = new OutputStreamWriter(yc.getOutputStream()); 

    out.write(data); 
    out.flush(); 
    //out.write(data); 
    out.close(); 
    ... 

URLに定義されているのと同じページが返されます。それは私に/taxsummary.aspxが終わるべきである要求されたページを送らない。

aspがポストデータを受け取り、与えられた各パラメータに対して一意のHTMLを生成するかのように見える。正しいパラメータを与えるにはどうしたらいいですか?

感謝!

答えて

2

コードは正常です。 POSTが正しく送信されると思います。私は問題がここにないと思う。ブラウザを使用している場合は、最初に少なくとも1つのHTTP GETを実行してフォームに到着します。これを行うと、サーバーはHTTPセッションを作成し、レスポンスヘッダーのSet-CookieにそのIDを返します。ブラウザを使用してフォームを送信すると、このヘッダー(Cookie)が返され、サーバーはそのセッションを識別できます。

javaから作業しているときは、最初の段階(HTTP GET)をスキップしています。あなたがセッションをまだ持っていないので、あなたがやっている最初のことはPOSTです。このASPページのロジックは何か分かりませんが、そのような要求を拒否すると思うのです。

だから、まずこの推測を確認してください。 LiveHttpHeadersという名前のFirefoxにプラグインを使うことができます。それをインストールして手動で操作してください。すべてのHTTP要求と応答が表示されます。彼らを助けろ。セッションIDがサーバーからクライアントに送り返されていることを確認します。今度はjavaで正確に同じものを実装してください。

多くの場合、サーバーが複数のリダイレクト応答を送信すると、状況がより複雑になります。この場合、あなたはそれらに従わなければなりません。 HttpConnectionにはsetFollowRedirects()メソッドがあります。パラメータtrueを指定して呼び出します。

BTW2:Apache HttpClientはHttpConnectionの完全な置き換えです。それはすべてを行い、そのようなタスクを実装するときは非常にお勧めです。

それだけです。がんばろう。時にはそれは簡単ではありません...

+0

よく、更新されたコード。今は、入力を読み込んだ後に出力を書き込めないということです。どのように私はこれをバイパスできますか? –

関連する問題