在 Java 中通过 post 方法发送表单

Posted

技术标签:

【中文标题】在 Java 中通过 post 方法发送表单【英文标题】:Send form by post method in Java 【发布时间】:2015-08-04 11:04:37 【问题描述】:

我需要通过 Java 或 Groovy 代码发送此表单:

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
    <input type="hidden" name="business" value="xxx@xxx.com">
    <input type="hidden" name="currency_code" value="EUR">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="upload" value="1">
    <input type="hidden" name="item_name_1" value="zzzzz zzzz zzz">
    <input type="hidden" name="item_number_1" value="11111111">
    <input type="hidden" name="item_quantity_1" value="2">
    <input type="hidden" name="amount_1" value="11.11">

    <input type="image" src="xxxxxxx" border="0" name="submit">
    <img border="0" src="xxxxxxxxxxxxx"  >
</form>

我需要代码来发送发送此表单的相同请求。

这不是一个正常的发帖请求。当您提交此 html 时,您将被重定向到 PayPal。我需要从 Java 重定向到 PayPal,但通过 post 方法发送数据。

【问题讨论】:

有什么问题? 使用 apache Httpclient 用 java 生成和发送相同的 http POST 请求应该很容易。我不明白“我需要重定向到贝宝”部分。发生重定向是因为服务器告诉您访问特定的 URL。检查服务器对该 URL 的响应。 【参考方案1】:

试试这个代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;  
import java.net.MalformedURLException;
import java.net.URL;


public class Sender 

public static void main(String[] args) 


    sendPost("xxx@xxx.com", "EUR", "_cart", "1", "zzzzz zzzz zzz", "11111111", "2", "11.11");


public static String sendPost(String business,String currency_code,String cmd,String upload,String item_name_1,String item_number_1,
        String item_quantity_1,String amount_1
        )

    try 
        URL url = new URL("https://www.sandbox.paypal.com/cgi-bin/webscr");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        conn.setRequestProperty("Content-Type", "text/html");
        conn.setDoOutput(true);

        OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream(),"UTF-8");
        String request="business="+business+"&currency_code="+currency_code+
                "&cmd="+cmd+"&upload="+upload+"&item_name_1="+item_name_1+"&item_number_1="+item_number_1+
                "&item_quantity_1="+item_quantity_1+"&amount_1="+amount_1;
        writer.write(request);
        writer.flush();
        System.out.println("Code:"+conn.getResponseCode());
        System.out.println("mess:"+conn.getResponseMessage());


        String response="";
        BufferedReader reader = new BufferedReader(new  InputStreamReader(conn.getInputStream(),"UTF-8"));
        String line;
        while ((line = reader.readLine()) != null) 
            response+=line;
        

        System.out.println(new String(response.getBytes(),"UTF8"));
        writer.close();
        reader.close();
     catch (MalformedURLException e) 
        e.printStackTrace();
     catch (IOException e) 
        e.printStackTrace();
    

    return "";

【讨论】:

以上是关于在 Java 中通过 post 方法发送表单的主要内容,如果未能解决你的问题,请参考以下文章

解决在Unity3D中通过Post向服务器提交请求,表单中带有中文导致的乱码问题!

解决在Unity3D中通过Post向服务器提交请求,表单中带有中文导致的乱码问题!

在 Laravel 5.1 中通过 AJAX 将用户输入数据从视图传递到控制器

在 Laravel 5.2 中通过 RESTful 资源控制器使用 jQuery Ajax Post 方法将数据存储在数据库中

Java中的文件上传和下载

如何在joomla模块中通过javascript发送输入文件类型