首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python tornado AsyncHTTPClient fluke

Python tornado AsyncHTTPClient fluke
EN

Stack Overflow用户
提问于 2015-12-23 20:35:30
回答 2查看 132关注 0票数 0

我这里有个问题:

代码语言:javascript
复制
import tornado.httpclient
from tornado.httpclient import AsyncHTTPClient
AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient")

# inside a function
client = AsyncHTTPClient()
result = yield client.fetch('http://some-site.com/#hash?&key=value', raise_error=False)
print(result.effective_url) # prints: http://some.site/some/path/

请注意,键值位于hash之后。一些我刮过的网站会给出这样的重定向。如果我注释掉"AsyncHTTPClient.configure('tornado.curl_httpclient.CurlAsyncHTTPClient')“,一切都很好,但我不能使用proxy来交叉和查看HTTP交换。在hash消失后,使用这一行..。有人能告诉我为什么吗?

EN

回答 2

Stack Overflow用户

发布于 2015-12-23 22:52:40

您想要传递#fragment部件。浏览器使用它来导航页面上的锚点或客户端路由(更多信息rfc3985 3.5)。

浏览器不会将片段发送到服务器。此外,libcurl不发送片段部分as doc says

虽然空格通常不是“合法”的字母,但libcurl接受它们。当用户想要传递一个'#‘(散列)字符时,它将被视为一个片段,并被libcurl截断(如果按字面提供)。相反,您必须通过提供反斜杠和十六进制的ASCII值来对其进行转义:"\23“。

您也可以用%23替换#,但服务器应该知道如何处理它,更有可能的是它不知道,因为它是由浏览器处理的部分。

票数 0
EN

Stack Overflow用户

发布于 2015-12-24 01:30:37

#之后的所有内容都称为“片段”,通常不会发送到服务器。相反,它可供浏览器和javascript使用。在HTTP级别,http://some-site.com/#hash?&key=value等同于http://some-site.com/。无论您是否使用curl,AsyncHTTPClient都应该剥离碎片;您在这里看到的区别可能是一个bug。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34435853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档