【发布时间】:2017-10-13 07:40:47
【问题描述】:
这是对this 问题的跟进。起初我认为在查看example from the Qt wiki 后问题已经解决(我使用相同的代码,没有进行任何更改)。但是,罪魁祸首似乎是 URL。我尝试使用this 答案中提供的链接来测试我的 http GET 请求。使用 Http Requester(用于 Http 请求(GET、POST 等)的 Firefox 插件)和curl 显示此链接没有问题^:
$~: curl --request GET --url "http://httpbin.org/ip"
由于某种原因,Qt 卡住了,并且永远不会发出 readyRead()/finished() 信号。
因此,由于套接字超时,请求在一段时间后被取消......对于非常小的东西,Firefox 在不到一秒的时间内打开。
在 Http 方面,我远非专家。我想知道为什么在 Qt 中会出现这种行为,而在使用其他工具时却没有。
编辑:我还使用 Python 及其 urllib
import urllib.request
res = urllib.request.urlopen("http://httpbin.org/ip").read().decode("utf-8")
import xml.etree.ElementTree as ET
doc = ET.fromstring(res)
它工作得很好。很明显,Qt 正在运行和/或我在使用它时遗漏了一些东西。
EDIT2:我还尝试了另一种 HTTP 请求测试服务 - https://postman-echo.com。用curl没问题:
$~: curl --request GET --url "https://postman-echo.com/get?foo1=bar1&foo2=bar2"
令我惊讶的是,Qt 也没有问题!我在这里看到的唯一巨大差异是postman-echo.com 使用HTTPS,而我尝试过的其他URL 是HTTP。我排除了 https://www.qt.io,它是 Qt 示例中的默认 URL,并且工作得很好(尽管它没有任何参数)。
【问题讨论】:
-
您仍然需要展示您的代码以帮助我们理解问题。
-
@vahancho 我使用来自 Qt wiki 的完全相同的代码。没有改变任何一行。
-
为了找到问题的根本原因,您必须回答以下问题:1) 我的应用程序是否发送正确的请求?,2) 应用程序是否从服务器获得响应? 3) 应用程序是否正确处理从服务器获得的响应?
-
该示例适用于我尝试过的许多其他 URL,包括下载大文件(如 Ubuntu 17.04 的 ISO 映像),这意味着在 general 中它确实发送了正确的请求,从服务器获取响应并毫无问题地处理它。但是,在我上面描述的情况下,我不知道如何检查是否发送了正确的请求。我确实知道事情是异步工作的,所以我确实希望从服务器获得响应会有延迟。
-
您在向该服务器发送请求后是否处理错误?服务器可能会尝试识别“谁”发送请求,如果未知,则拒绝正确响应。你也可以检查一下这个想法。