2017-11-02 11 views
0

POSTメソッドを使用してパラメータをリンクにリダイレクトするにはどうすればよいですか? このような可能性はありますか?リダイレクトとPOSTメソッド

link = http://92.42.51.91/CGGateway/Default.aspx 

私は現在、情報を送信し、私は何の問題 を持っていません。しかし、私は正確に情報を送信すると、私は

をリダイレクトすることができない人々が言うとき、私は、通常のリンク

URL url = new URL("http://62.68.645.32/Default.aspx"); 
    Map<String, Object> params = new LinkedHashMap<String, Object>(); 
    params.put("Timestamp", Timestamp); 
    params.put("Callback", "google.com"); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setRequestMethod("POST"); 

    resp.sendRedirect(Link); 
+0

さらに詳しいコードを[mcve]として表示してください。リダイレクションは使用しているフレームワークによって異なります –

答えて

1

を使用することができます「リダイレクト」とは、HTTPコード302のリダイレクトを意味します。 httpクライアントの302コードの多くの実装は、元のリクエストメソッドに関係なく、GETのみでリダイレクトを行います。したがって、このコードを使用してPOSTエンドポイントにリダイレクトすることは信頼できません。

これを克服するための簡単な方法は、自己投稿フォームです:

<form name="autoform" action="..." method="POST"> 
    <input type="hidden" name="param1" value="value1"> 
    <input type="hidden" name="param2" value="value2"> 
    ... 
</form> 

そして、それがユーザーのブラウザに自動的に提出します

<script type="text/javascript"> 
    document.autoform.submit(); 
</script> 

もう一つの方法は、保持する必要があり、コード307を使用しています元のHTTPメソッド:

response.setHeader("Location", response.encodeRedirectURL(url)); 
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT); 

このような場合、正確なPAを制御することはできませんブラウザはそれをurlに送信します。代わりに、ブラウザはリダイレクトURLに送信したのと同じパラメータを自動的に送信します。

0

ない私はあなたが完全に、しかし、私は私が得るために、ポストに使用できるクエリ文字列を構築するためのクラスを書いて理解してください:

public class QueryBuilder { 
    private final String encoding; 
    private final StringBuilder buf = new StringBuilder(); 

    public QueryBuilder(String encoding) { 
     this.encoding = encoding; 
    } 

    public boolean isEmpty() { 
     return buf.length() == 0; 
    } 

    public void add(String name, Object value) { 
     try { 
      if (value != null) { 
       if (buf.length() > 0) { 
        buf.append('&'); 
       } 
       buf.append(name); 
       buf.append('='); 
       buf.append(URLEncoder.encode(value.toString(), encoding)); 
      } 
     } catch (UnsupportedEncodingException e) { 
      throw new IllegalStateException("Unsupported encoding " + encoding); 
     } 
    } 

    public String toURL(String url) { 
     if (buf.length() == 0) { 
      return url; 
     } else { 
      return url + '?' + buf.toString(); 
     } 
    } 

    @Override 
    public String toString() { 
     return buf.toString(); 
    } 
} 

POSTなどのパラメータを渡すには、

QueryBuilder query = new QueryBuilder("UTF-8"); 
query.add("Timestamp", Timestamp); 
query.add("Callback", "google.com"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setDoOutput(true); 
conn.setRequestMethod("POST"); 
OutputStream out = cnt.getOutputStream(); 
try { 
    out.write(query.toString().getBytes("UTF-8")); 
} finally { 
    out.close(); 
} 
int stat = conn.getResponseCode(); 
if (stat < 200 || stat >= 300) { 
    throw new IOException("HTTP Error " + stat + ": " 
      + conn.getResponseMessage()); 
} 
... 
関連する問題