java - 使用 Java 重放 post 请求

标签 java httpclient httpurlconnection fiddler apache-httpclient-4.x

我想使用 java 重放 POST 请求。我已经从 Fiddler 获取了所有 header 。这是它的困惑副本。

POST http://www.website.com/cgi_bin/abc.cgi HTTP/1.1
Host: www.website.com
Connection: keep-alive
Content-Length: 81
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://www.website.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://www.website.com/page_one.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,hi;q=0.6,ms;q=0.4,ta;q=0.2
Cookie: _ga=GA1.3.5137840677.9397628959

parm1=4611&parm2=818&parm3=818&submit=Find+Status

我尝试通过多种方式设置上述属性,但是如果我编程却无法在fiddler中成功回复。

如何做到这一点?如果可能,请提供使用 Apache HTTP 客户端的解决方案。

这是我尝试过的代码。

import java.io.*;
import java.net.*;

public class Main {
    public static void main(String[] args) {
        try{            
            URL url = new URL("http://www.website.com/cgi_bin/abc.cgi");
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();

            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("User-Agent", "Mozilla/5.0");
            conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
            conn.setRequestProperty("Cookie", "_ga=GA1.3.5137840677.9397628959");
            conn.setRequestProperty("Referer", "http://www.website.com/page_one.html");
            conn.setRequestProperty("Origin", "http://www.website.com");
            conn.addRequestProperty("parm1", "4611");
            conn.addRequestProperty("parm2", "818");
            conn.addRequestProperty("parm2", "818");
            conn.addRequestProperty("submit", "Find Status");

            conn.connect();

            InputStream  is = conn.getInputStream();
            FileOutputStream fos = new FileOutputStream("output.html");

            int numCharsRead;
            byte[] byteArray = new byte[1024];

            while ((numCharsRead = is.read(byteArray)) > 0) {               
                fos.write(byteArray, 0, numCharsRead);
            }

            fos.close();

            System.out.println("Done!");

        }catch(Exception e){
            System.err.println(e.getMessage());
        }
    }
}

最佳答案

Apache HttpClient 可能会解决您的问题。下面的代码片段可能对您有帮助,但您需要对此进行必要的自定义。

注意:另请参阅 HttpClient 和 HttpCore

        HttpClient client = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("Your URL");

        //add your headers like this
        httpPost.setHeader("Content-type", "application/xml");
        httpPost.setHeader("Accept", "application/xml");

        //add your parameters like this
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("param1", "4611"));
        nameValuePairs.add(new BasicNameValuePair("param2", "818"));
        nameValuePairs.add(new BasicNameValuePair("param3", "818"));
        nameValuePairs.add(new BasicNameValuePair("submit", "Find Status"));

        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse response = client.execute(httpPost); 
        HttpEntity httpEntity = response.getEntity();

        //get response as String or what ever way you need
        String response = EntityUtils.toString(httpEntity);

关于java - 使用 Java 重放 post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24552579/

相关文章:

java - StringBuffer 不会将整个流读入字符串 (JAVA/Android)

带有 HALF_EVEN 舍入的 Java String.format()

java - Weblogic读取元数据文件

java - 尽管可选<>,但仍出现空指针异常

java - Spring MVC @Autowire 不工作 - 循环依赖?

c# - 取消请求会降低网络速度

java - HttpClient.execute 总是给出异常

java - 500-内部服务错误-使用 eQSL

java - Android 应用程序的 android.os.NetworkOnMainThreadException

.net - System.Net.Http.HttpClient 是否受到 HttpWebRequest.AllowWriteStreamBuffering 的影响?