问题标签 [httpurlconnection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
850 浏览

java - 如何在 HTTPUrlConnection 中取消设置 ContentHandlerFactory

HTTPUrlConnection.setContentHandlerFactory()方法抛出异常说工厂已经定义。我明白那个。是否可以取消设置工厂并更改内容处理程序工厂?

0 投票
1 回答
665 浏览

java - 在 Activity 进行 HTTP 连接之前,Android 服务无法进行 HTTP 连接

这是我的帖子:

我试图让自己尽可能清楚:

  1. 我的应用程序中的类的描述
  2. 代码架构的描述(由服务和活动)
  3. 描述应该发生的事情
  4. 描述实际发生的事情
  5. 日志猫
  6. 源代码

应用类说明

我的申请中有:

  • 启动时启动的服务,由MAJService类管理
  • ConsoNRJ班级管理的活动
  • 一个工作类,它将通过 HTTP 获取 HTML 页面,称为MAJDonnees
  • 一个被调用的助手类,InfosConso它将实例化一个MAJDonnees工作者。

处理说明

当服务启动时,它将:

  • 创建一个InfosConso对象
  • 这个InfosConso对象将创建一个MAJDonnees
  • 这个MAJDonnees对象将使用 HTTP 查询HttpURLConnection

该活动几乎相同:

  • 创建一个InfosConso对象
  • 这个InfosConso对象将创建一个MAJDonnees
  • MAJDonnees对象将创建一个AsyncTask,然后使用HttpURLConnection

您可以看到一个可以帮助您理解我的代码的图表:
code.google.com/p/consonrj/wiki/CodeStructure


应该发生什么

由于 Activity 和 Service 基本上运行相同的代码(在MAJDonnees类中),它们的行为方式应该完全相同:获取 HTML 页面并解析它们

实际发生了什么

从服务运行时,在HttpURLConnections处理时返回错误结果MAJDonnees。调用的HttpURLConnections实例h给出了无效的 HTTP 响应:h.getResponseCode()返回 -1。
我不知道如何获得更多的调试信息。

但是,如果活动已启动,HTTP 连接在处理时工作MAJDonnees,确实h.getResponseCode()返回 200(HTTP 200 OK)。

那么如果服务再次运行(它计划每 x 分钟运行一次),HTTP 连接就会工作!


日志猫

您可以先运行服务的 logcat,然后运行活动,然后再运行服务,然后查看行为。
http://pastebin.com/DGc8fym2
对不起是法语,希望你还能猜到!:)

源代码

如果您愿意,可以在以下位置查看整个源代码:
code.google.com/p/consonrj/source/browse/#svn/trunk


我希望你能帮我调试这个!我的服务需要在设备启动时和每 x 小时/天从 Internet 获取数据,并且不需要首先启动活动!

谢谢。

0 投票
2 回答
2393 浏览

java - HttpURLConnection:有必要调用connect()吗?

我见过的许多例子都没有明确地调用connect(). 相反,他们只是使用getInputStream()or getResponseCode()

我假设所有这些需要连接的 HttpURLConnection 方法都只是调用connect()它们自己?

是否存在connect()必须显式调用 HttpURLConnection 的情况?

0 投票
2 回答
2354 浏览

java - HttpURLConnection:必须阅读整个响应有什么关系?

我目前的问题与这个非常相似。

我有一个downloadFile(URL)函数可以创建一个新的 HttpURLConnection,打开它,读取它,返回结果。当我在同一个 URL 上多次调用此函数时,第二次几乎总是返回 -1 的响应代码(但不会抛出异常!!!)。

问题的最佳答案非常有帮助,但我试图理解一些事情。

那么,如果将 http.keepAlive 设置为 false 可以解决问题,那么它究竟表明了什么?服务器以违反 http 协议的方式响应?或者更有可能,我的代码在某种程度上违反了协议?痕迹会告诉我什么?我应该寻找什么?

这有什么关系:

您需要从错误流中读取所有内容。否则,它将混淆下一个连接,这就是 -1 的原因。

这是否意味着如果响应是某种类型的错误(这将是什么响应代码?),流必须被完全读取?此外,每次我尝试一个 http 请求时,我基本上都是在创建一个新连接,然后disconnect()在最后对其进行 ing。

但是,就我而言,我没有得到 401 或其他什么。它总是 200。但我的第二次连接几乎总是失败。这是否意味着我应该读取其他一些我没有读取的数据(以类似的方式必须完全读取错误流)?

请帮助阐明这一点?我觉得我缺少一些基本的 http 协议理解。

PS 如果我只是使用 Apache HttpClient,我是否不必处理所有这些协议细节?它会照顾我的一切吗?

0 投票
12 回答
1131871 浏览

java - 如何使用 java.net.URLConnection 触发和处理 HTTP 请求

java.net.URLConnection这里经常被问及使用,Oracle 教程对此过于简洁。

该教程基本上只展示了如何触发GET请求并读取响应。它没有在任何地方解释如何使用它来执行POST请求、设置请求标头、读取响应标头、处理 cookie、提交 HTML 表单、上传文件等。

那么,如何使用java.net.URLConnection来触发和处理“高级”HTTP 请求呢?

0 投票
4 回答
30542 浏览

buffer - 阅读 HttpURLConnection InputStream - 手动缓冲区还是 BufferedInputStream?

读取 HttpURLConnection 的 InputStream 时,是否有理由使用以下其中之一?我已经在示例中看到了两者。

手动缓冲:

缓冲输入流

编辑一般来说,我对 HTTP 还是很陌生,但我想到的一个考虑是,如果我使用的是持久 HTTP 连接,我不能在输入流为空之前读取,对吗?在那种情况下,我不需要读取消息长度并只读取该长度的输入流吗?

同样,如果不使用持久连接,我包含的代码在正确读取流方面是否 100% 好?

0 投票
1 回答
2118 浏览

xml - 如何使用 JSP 读取远程网站上的 XML 文件?

我在我的应用程序中使用 java servlet 和 jsp,我需要读取远程 XML 文件并将其正确呈现为 HTML 并显示在网页上……读取过程使用什么技术?我应该使用 HTTPURLConnection 类吗?读取xml文件的内容还是有其他方法?另外,如果我使用 servlet 作为控制器,使用 JSP 作为视图,那么 servlet 和 jsp 在这个过程中的职责是什么?servlet 是否应该只读取整个 XML 文件,然后将读取的输出传递给 JSP,JSP 将只打印例如,它并使用 XSL 正确呈现?

我真的希望听到任何可以提供帮助的人的消息,

亲切的问候

0 投票
1 回答
2707 浏览

java - 从 urlconnection 的输入流读取时速度变慢(即使使用 byte[] 和缓冲区)

好的,所以在花了两天时间试图找出问题并阅读了大量文章之后,我终于决定鼓起勇气寻求一些建议(我第一次来这里)。

现在到手头的问题 - 我正在编写一个程序,它将解析游戏中的 api 数据,即战斗日志。数据库中会有很多条目(20+ 百万),因此每个战斗日志页面的解析速度非常重要。

要解析的页面如下所示:http://api.erepublik.com/v1/feeds/battle_logs/10000/0。 (如果使用 chrome,请参阅源代码,它不会正确显示页面)。它有 1000 个命中条目,然后是一些战斗信息(最后一页显然会小于 1000)。平均而言,一个页面包含 175000 个字符,UTF-8 编码,xml 格式(v 1.0)。程序将在一台好的 PC 上本地运行,内存几乎是无限的(因此创建 byte[250000] 是完全可以的)。

格式从不改变,非常方便。

现在,我像往常一样开始:

这是有趣的部分开始的地方。我运行了一些分析(使用 System.currentTimeMillis())来找出什么需要很长时间,什么不需要。对该方法的调用平均只需要 200 毫秒

网络操作预计需要 200 毫秒,我对此很好。但是,当我以任何方式解析 inputStream(将其读入字符串/使用 java XML 解析器/将其读入另一个 ByteArrayStream)时,该过程需要超过 1000 毫秒!

例如,如果我将上面从 getContentStream() 获得的流 ('is') 直接传递给此方法,则此代码需要 1000 毫秒:

如果传入初始 InputStream 'is',此代码也需要大约 920 毫秒(不要读入代码本身 - 它只是通过直接计算字符来提取我需要的数据,这可以通过严格的 api 提要格式来完成) :

我尝试将默认的 BufferedReader 替换为

这并没有太大变化。我的第二次尝试是将 A 和 B 之间的代码替换为: Iterator it = IOUtils.lineIterator(is, "UTF-8");

相同的结果,除了这次 AB 是 0 毫秒,而 BC 是 1000 毫秒,所以每次调用 it.next() 都必须花费大量时间。(IOUtils 来自 apache-commons-io 库)。

这是罪魁祸首 - 将流解析为字符串所花费的时间,无论是迭代器还是 BufferedReader 在所有情况下都是大约 1000 毫秒,而其余代码花费了 0 毫秒(例如不相关)。这意味着由于某种原因将流解析为 LinkedList 或对其进行迭代会占用我的大量系统资源。问题是——为什么?难道只是java的制作方式......不......那只是愚蠢,所以我做了另一个实验。

在我的主要方法中,我在 getWebPageAsStream() 之后添加:

InputStream->byte[] 转换再次花费了 1000 毫秒 - 这是许多人建议读取 InputStream 的方式,但它仍然很慢。猜猜看——上面的 2 个解析器方法(convertToXML() 和 convertBattlePagetoXMLWithoutDOM(),当传递 'is2' 而不是 'is' 时,在所有 4 种情况下,都在 50 毫秒内完成。

我读了一个建议,即流在解除阻塞之前等待连接关闭,所以我尝试使用 HttpComponentsClient 4.0 ( http://hc.apache.org/httpcomponents-client/index.html ),但最初的 InputStream 花了同样长的时间解析。例如这段代码:

处理时间更长(仅网络需要 50 毫秒)并且流解析时间保持不变。显然它可以被实例化,以免每次都创建 HttpClient 和属性(更快的网络时间),但流问题不会受此影响。

所以我们来到了中心问题 - 为什么初始 URLConnection InputStream(或 HttpClient InputStream)需要这么长时间来处理,而在本地创建的任何相同大小和内容的流都快几个数量级?我的意思是,初始响应已经在 RAM 中的某个地方,与刚从字节 [] 创建相同的流相比,我看不出为什么它的处理速度如此缓慢。

考虑到我必须解析数百万个条目和数千个这样的页面,几乎 1.5 秒/页的总处理时间似乎太长了。

有任何想法吗?

PS请询问是否需要更多代码-解析后我唯一要做的就是制作一个PreparedStatement并将条目以1000+包的形式放入JavaDB,性能还可以~200ms / 1000个条目,prb可以通过更多缓存进行优化但我没有仔细研究它。

0 投票
3 回答
5486 浏览

java - httpURLConnection vs apache commons http

我只是想知道你们中的任何人在使用 java 默认 HttpURLConnection 类时是否有任何问题。某种使您切换到 apache commons 的错误。

或者仅仅是类公开的(丑陋的)接口证明了第 3 方 http lib 的诞生是合理的?

披露:我听到一些反对 java.net 存在一些严重问题的论点,但我发现很难相信作为 java 核心发行版一部分的类在 JDK 的几个版本之后仍然存在问题

0 投票
4 回答
8120 浏览

java - getRequestProperty("Authorization") 总是返回 null

我正在尝试读取 HTTP 请求的授权标头(因为我需要向其中添加一些内容),但标头值总是为 null。其他标题工作正常。

难道我做错了什么?这是“安全”功能吗?有没有办法使用 URLConnection 进行这项工作,还是我需要使用另一个 HTTP 客户端库?