【问题标题】:HTTP POST-GET application in JavaJava 中的 HTTP POST-GET 应用程序
【发布时间】:2012-01-09 00:14:29
【问题描述】:

我想创建一个小型 Java 应用程序以便与 HTML 服务器通信:我需要以 HTML 形式发布表单并获取结果 使用 Wireshark,我捕获了我应该发送的包的内容。是这样的:

__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwU[..]
[...]__EVENTVALIDATION=%2FwEWJAK9%2Fu[...]
TxTNumeroPalina=3329&ListaLocalit%C3%A0=NAPOLI&TxTViaInteresse=&TxTCAP=&BtnInviaDati=Invia+Dati

点代表其他随机字符。 我应该收到一个包含一些公共汽车时间表的页面。我试过这种方式。

String eventTarget = "__EVENTTARGET" + "=" + "&";
String eventArgument = "__EVENTARGUMENT" + "=" + "&";
String viewState = "__VIEWSTATE" + "=" + "%2FwEPDwUJMj[...]";
String eventValidation = "__EVENTVALIDATION" + "=" + "%2FwEWJ[...]";

String eventObjects = eventTarget + eventArgument + viewState + eventValidation;

//form parameters
String numeroPalina = "TxtNumeroPalina" + "=" + "3329" + "&";
String listaLocalita = "Listalocalit%C3%A0" + "=" + "NAPOLI" + "&";
String viaInteresse = "TxtViaInteresse" + "=" + "" + "&";
String cap = "TxtCAP" + "=" + "";
String sendButton = "BtnInviaDati" + "=" + "Invia+Dati";
String locatorObjects = numeroPalina + listaLocalita + viaInteresse + cap;
String newData = URLEncoder.encode(eventTarget + eventArgument + viewState + eventValidation + locatorObjects, "UTF-8");

URL infoclickUrl = new URL("http://www.anm.it/Default.aspx");
HttpURLConnection connection = (HttpURLConnection)infoclickUrl.openConnection();
connection.setDoOutput(true);
HttpURLConnection.setFollowRedirects(true);
connection.setRequestMethod("POST");

OutputStreamWriter streamWriter = new OutputStreamWriter(connection.getOutputStream());
streamWriter.write(newData);
streamWriter.flush();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
String page="";
while ((line = streamReader.readLine()) != null) {
page += line;
}

streamReader.close();
streamWriter.close();

我永远无法从中得到正确的结果!它有什么问题?

---> 编辑: 在http://www.anm.it/Default.aspx 中,您可以编写一个带有某个公交车站的表格,发送它并返回所选公交车站(到达公交车)的时间表。因此,我应该收到一个包含查询结果的 html 页面(如果我通过浏览器发送表单,它可以工作)。使用我编写的代码,我得到的只是一个包含初始页面的 html 页面。

【问题讨论】:

  • 定义“正确结果”并显示您实际收到的内容
  • 如果你使用 HTTP,为什么不使用例如 Apache Common 的 HTTPClient?
  • 我看到数据是作为一个多步骤过程接收的。但是,我看到您只提出一个请求。如果您向我们展示帖子中提到的完整 URL,将会有所帮助。
  • 我指的网址是anm.it/Default.aspx,如果我通过浏览器使用它就可以了。我想知道如何在 java 中创建和发送此 URL 的表单并获得结果。

标签: java http post get


【解决方案1】:

您没有在 java 代码中处理 cookies。尝试使用 firefox 的 live http header 插件并查看浏览器和服务器之间交换的所有数据。尝试从您的 java 代码中发送以下给定的 cookie。

Cookie:ISAWPLB{6DC6CE50-2F43-4F96-92BC-840EFF24E706}={23855B49-8C3B-43BA-B5FB-41A85FDD9F3C}

我仍然认为您应该使用Apache HttpClient 进行申请。

【讨论】:

    【解决方案2】:

    屏幕抓取 101

    1. POST 并不总是翻译成完整的 url:

      URL infoclickUrl = new URL("http://www.anm.it/Default.aspx");
      

    端口 URL 将是 /Default.aspx HTTP X.X

    1. 有时,服务器使用虚拟主机,因此您需要在标题中附加 Host: anm.it

    2. 在开始编码之前使用像 firebug 这样的良好跟踪工具。

    3. HTTPUnit / HTMLUnit 非常适合这项工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-04
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      相关资源
      最近更新 更多