如何使用Java(Apache HTTP Client)模拟浏览器HTTPS POST请求?

时间:2011-11-16 10:03:05

标签: java http https web-crawler

有一个带有AJAX API的网站。我打开Firebug来查看登录HTTPS POST请求的详细信息。

然后我尝试使用Apache HTTP Client从我的Java程序执行相同的POST请求。但不知何故,服务器将我的请求标识为非浏览器请求。它发送一条安全异常消息,告诉我。

当所有请求标头都相同时,还有什么可以将我的客户端识别为浏览器?

3 个答案:

答案 0 :(得分:1)

user-agent标题? "httpclient.useragent" property

Use debug mode查看完整的电汇记录,并将请求与firebug的请求进行比较。

答案 1 :(得分:1)

不知道POST请求,但是有一个多部分请求

  

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

看看它是否有任何帮助

编辑:多部分请求的代码示例

  

String createOrderUrl = Constants.CREATE_ORDER_URL;

            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(createOrderUrl);

            MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

            // add the information to the multipart request
            entity.addPart("msisdn", new StringBody("something"));
            entity.addPart("recipientname", new StringBody("something"));
            entity.addPart("recipientnumber", new StringBody("something"));
            entity.addPart("recipientaddress", new StringBody("something"));

            // add the images
            for (String imagePath : selectedImages)
            {
                FileBody bin = new FileBody(new File(imagePath));

                entity.addPart("image", bin);

            }
            httpPost.setEntity(entity);

            return httpClient.execute(httpPost);

答案 2 :(得分:1)

我的猜测是这是一个cookie问题(例如浏览器存储的JSESSIONID)。在POST中包含会话信息。看看这个网站的cookies。尝试禁用此网站的Cookie,再次查看请求。