我这里有个问题:
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消失后,使用这一行..。有人能告诉我为什么吗?
发布于 2015-12-23 22:52:40
您想要传递#fragment部件。浏览器使用它来导航页面上的锚点或客户端路由(更多信息rfc3985 3.5)。
浏览器不会将片段发送到服务器。此外,libcurl不发送片段部分as doc says
虽然空格通常不是“合法”的字母,但libcurl接受它们。当用户想要传递一个'#‘(散列)字符时,它将被视为一个片段,并被libcurl截断(如果按字面提供)。相反,您必须通过提供反斜杠和十六进制的ASCII值来对其进行转义:"\23“。
您也可以用%23替换#,但服务器应该知道如何处理它,更有可能的是它不知道,因为它是由浏览器处理的部分。
发布于 2015-12-24 01:30:37
#之后的所有内容都称为“片段”,通常不会发送到服务器。相反,它可供浏览器和javascript使用。在HTTP级别,http://some-site.com/#hash?&key=value等同于http://some-site.com/。无论您是否使用curl,AsyncHTTPClient都应该剥离碎片;您在这里看到的区别可能是一个bug。
https://stackoverflow.com/questions/34435853
复制相似问题