java - 使用 HttpURLConnection 的多个 Http 请求和响应

标签 java http httpurlconnection bots

我正在开发一个非常简单的 http 机器人。我正在使用 javax.net.ssl.HttpsURLConnection 类,并且必须发出多个请求。 代码片段:

HttpURLConnection urlConnection =
    (HttpURLConnection) new URL(url+"?"+firstParameters).openConnection();
urlConnection.setRequestProperty("Accept-Charset", "UTF-8");
headerFields = urlConnection.getHeaderFields();
keys = headerFields.keySet();
for(String key : keys){
    if(key != null && key.contains("ookie")){
        cookies = urlConnection.getHeaderField(key);
        break;
    }
}
for(String cookie : cookies.split(";")){
    if(cookie.contains("JSESSION")){
        JSESSION = cookie.split("=")[1];
        break;
    }
}
document = new InputSource(urlConnection.getInputStream());
parser.setDocument(document);
attributesId.put("name",new ArrayList<String>(Arrays.asList(attributesNames)));
elementsIds.put("INPUT",attributesId);
elements = parser.getValues(elementsIds);
for(String attr : attributesNames){
    secondParameters = secondParameters.replaceAll("#r"+index,elements.get(attr));
}
urlConnection.getInputStream().close();
//Second call 
urlConnection = (HttpURLConnection) new URL(url2).openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("Cookie", "JSESSIONID="+JSESSION);
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
payload = new PrintWriter(urlConnection.getOutputStream());
payload.print(secondParameters);
payload.flush();
payload.close();

总结上面的代码,首先我执行一个没有任何有效负载的请求,并且我能够看到来自服务器的正确响应,但问题是当我发出第二个请求时(现在带有有效负载和 JSESSION cookie),我收到的回复与我在第一个请求中收到的回复相同,看来我再次发出第一个请求。 所以我的问题是,我做错了什么? 我只需要打开一个连接,然后更改 header 和有效负载? 有没有与多个http请求(混合方法,post和get)相关的教程?

提前致谢

最佳答案

我以前从未使用过HttpURLConnection。我通常使用Apache's HTTPClient code 。他们的主页上有很多关于它的文档和教程。

我注意到您的代码的一些事情:

  • 您的代码不会处理响应中的多个 Cookie header 。我的似乎处理得更好。
  • 您确定您只需要 JSESSION 吗?也许您还缺少其他 cookie?
  • 您是否调试过代码以确保您的 JSESSION cookie 设置正确?我在 Cookie 处理代码中添加了一些 trim() 调用,以确保某些空格不会滑入其中。
  • 我看不到您的 secondParameters 的实际值。我不知道它们是否有效。您是否调试过代码以验证 secondParamters 值看起来不错。您可以在我的代码中看到我发布到服务器的内容。顺便说一句,我会使用 StringBuilder 而不是 + 来构建它们。

希望这有帮助。

关于java - 使用 HttpURLConnection 的多个 Http 请求和响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785016/

相关文章:

java - HttpURLConnection 不响应也不抛出异常

java - 我如何更改 Ant grep 使其正则表达式中具有 unix 样式 "or"?

java - 有没有办法在 Windows 下使用 java.util.Preferences 而无需使用注册表作为后端?

java - Spring中的循环依赖

node.js - 将我的 socket.io 从 http 转换为 https 后,我的 javascript 给我一个奇怪的结果

java - 为什么没有发送http请求? Android Studio - 改造

android - HttpUrlConnection Keep Alive 无法正常工作

java HOUR 和 HOUR_OF_DAY 都返回 12 小时时间

http - 在 Firefox 中使用篡改数据篡改 GET 请求参数?

java - 线程 "main"java.net.MalformedURLException : no protocol error while finding broken links in a page using Selenium and Java 中出现异常