问题标签 [twisted.web]

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 回答
2650 浏览

python - twisted.web 服务器的导入问题

我刚刚开始使用twisted.web,并且在将Python 模块导入.rpy脚本时遇到了麻烦。

C:\py\twisted\mysite.py,我有这个:

在 中C:\py\twisted\index.rpy,我有这个:

twistd -n web --port 8888 --path C:\py\twisted在命令提示符下运行,服务器成功启动。但是当我请求时,localhost:8888我得到了一个源自 ImportError 的(巨大的)堆栈跟踪:

<type 'exceptions.ImportError'>: No module named mysite

我可以从解释器导入模块,如果我只是index.rpy作为 python 脚本执行,我不会收到导入错误。关于这个主题的文档有点模糊,它只是说“但是,在 Python 模块中定义资源子类通常是一个更好的主意。为了使模块中的更改可见,您必须重新启动 Python 进程或重新加载模块:”(从这里)。

有谁知道这样做的正确方法?

0 投票
1 回答
261 浏览

python - 与twisted.web 等效的threading.local?

在异步环境中,threading.local不再保证是上下文本地的,因为多个上下文可能共存于单个线程中。大多数异步框架(gevent、eventlet)都提供了get_current_context()识别当前上下文的功能。有些提供了猴子补丁的方法,threading.local因此它对于“greenthreads”或其他特定于框架的上下文是本地的。我在扭曲的文档中找不到这样的功能。我该怎么做呢?

0 投票
1 回答
2429 浏览

python - 使用 Twisted 的基本 HTTP 解析

我是 Python 和 Twisted 游戏的新手,所以请原谅我可能会问这个问题的无知。作为第一个程序,我正在尝试使用 twisted.web.sever 编写一个基本的 HTTP 服务器,它会简单地打印以筛选 HTTP 请求,然后打印以筛选 HTTP 响应。我正在尝试打印整条消息。这是我到目前为止所拥有的:

到目前为止,我已经成功打印了请求。我想知道的是我可以在哪里访问原始响应数据,而不仅仅是文本消息。另外,如果我想开始解析请求/响应以获取信息,那么最好的方法是什么?

编辑:我也是stackoverflow的新手,如何让这段代码正确显示?

0 投票
2 回答
509 浏览

python - Templating and form processing toolkits to use with twisted.web

As the title states, I am looking for something, that will help me automate form processing (validation/rendering/etc) in twisted.web. I am also looking for a suitable templating toolkit to use with it.

As for templating, it is not so much of an issue as there are a lot of libraries in python, that do it. I was considering the following:

  • Nevow. Well, it is not only a templating toolkit, but a lot of other things that I may or may not need. It also plays nice with twisted's asynchronous nature (as far as I know, you can do incremental rendering with it, whether that is good or bad)
  • Jinja2. I haven't used it yet, but people seem to recommend it a lot. I've read about it and it seems to be a decent toolkit.
  • Genshi. same as the previous one
  • Django's templating engine. I've used it quite a lot. There are some drawbacks, but, well, it works. This is not a django project, so there is no need to restrict myself to django's components, though.
  • Hell, I can theoretically generate xhtml using xslt (but I won't :P), since almost all the data the project deals with is xml

As for form processing, I must say, that the only python web framework I am familiar with is django (quite familiar with it, actually) so I don't really know what I should be considering here.

I know nevow has some kind of form processing built-in, apparently (called formless), but I have no idea how good it is and I haven't found any documentation (besides the source) or usage examples (besides the completely trivial one in the turorial).

The other option I was considering is "bolting on" django's forms, since the forms are not really coupled to anything else in django, so it is possible to use them separately. I'd rather not do it, though, if it is at all possible.

Maybe someone with an existing twisted.web project can give me a hint or two.

0 投票
1 回答
5073 浏览

python - 为什么 Twisted 认为我没有调用 request.finish() 两次?

这是我在使用 Twisted.web 时遇到的一个烦人的问题。基本上,我有一个继承自twisted.web.resource.ResourceMako 模板并向其添加一些默认内容的类:

然后,我将问题缩小到这个小类(我测试过),我编写了一个继承自的资源Page

我想指出,在所有其他情况下,如果request.finish()不是函数中的最后一行,那么我return会立即执行它。

无论如何,我将这个类添加到网站,/test当我在那里导航时,我得到一个提交按钮。我单击提交按钮,在控制台中我得到:

但是,我只有在第一次提交页面时才得到这个。每隔一段时间就好了。我会忽略这一点,但它一直在唠叨我,我一生都无法弄清楚它为什么会这样做,以及为什么只有第一次提交页面。我似乎在网上找不到任何东西,甚至在request.finish()代码中删除打印语句和回溯也没有透露任何内容。

编辑

今天早上我尝试在资源中添加第二request.finish()行,但它仍然只给了我一次错误。我想它只会在资源中警告它一次——也许每次运行程序,或者每次会话,我不确定。无论如何,我将其更改为:

刚收到两条消息,一次。我仍然不知道为什么我不能在没有它说我完成了两次的情况下重定向请求(因为我不能没有重定向request.finish())。

0 投票
2 回答
5114 浏览

python - 如何在twisted.web 中完成不糟糕的文件上传?

我进行了搜索和搜索,但似乎找不到以任何合理方式将文件上传到我的 twisted.web 应用程序的方法。

目前,将文件上传发布到资源会产生一个request.args['file']变量,即填充了文件内容的列表。我找不到获取有关文件的任何信息的方法:mime 类型、文件名、文件大小(不只是获取字符串的长度args['file'][])等。

我读过twisted.web2 更擅长文件上传。但是我不知道它有多好,或者我将如何使用twisted.web2 来处理twisted.web 应用程序中的文件上传。

有什么建议么?这让我发疯了——哦,我查看了请求标头,并没有真正发现任何重要的东西。如何使用 Twisted 获取有关文件上传的更多元信息?

还,

我怎样才能从请求对象中获取裸露的 HTTP 请求?是否可以?

0 投票
3 回答
5040 浏览

python - 我是否正确解析了这个 HTTP POST 请求?

首先让我说,我正在使用twisted.web框架。Twisted.web的文件上传不像我想要的那样工作(它只包括文件数据,而不是任何其他信息),cgi.parse_multipart不像我想要的那样工作(同样的事情,twisted.web使用这个功能),cgi.FieldStorage没有工作(因为我通过扭曲而不是 CGI 接口获取 POST 数据——据我所知,FieldStorage尝试通过标准输入获取请求),并且twisted.web2对我不起作用,因为使用Deferred混淆和激怒了我(对于我想要的来说太复杂了)。

话虽如此,我决定自己尝试解析 HTTP 请求。

使用 Chrome,HTTP 请求是这样形成的:

总是这样形成吗?我正在用正则表达式解析它,就像这样(请原谅代码墙):

(注意,我剪掉了大部分代码以仅显示我认为相关的内容(正则表达式(是的,嵌套括号),这是我构建__init__的类中的一个方法(迄今为止唯一的方法)Uploads。完整的代码可以在修订历史中可以看到(我希望我没有不匹配任何括号)

您可以看到,每当达到边界时,我都会启动一个新的“文件”字典。我开始in_headerTrue我正在解析标题。当我到达一个空行时,我将其切换到False- 但不是在检查是否Content-Type为该表单值设置了 a 之前 - 如果没有,我设置,ignore_current_file因为我只是在寻找文件上传。

我知道我应该使用一个库,但是我厌倦了阅读文档,试图在我的项目中获得不同的解决方案,并且仍然让代码看起来合理。我只是想跳过这一部分——如果用文件上传来解析 HTTP POST 是这么简单,那么我会坚持下去。

注意:这段代码现在完美运行,我只是想知道它是否会阻塞/吐出来自某些浏览器的请求。

0 投票
1 回答
909 浏览

python - twisted web getPage,2 个类中的 2 个客户端,管理两者之间的事件

我正在尝试在 twisted.web 中创建一个桥接程序,该程序从 Web 服务器接收数据并将其发送到另一台服务器,因此我使用了 2 个 getPage 应用程序,为方便起见,我将它们包装在一个类中,该类包含所有回调和客户端“例程”.. 1) 身份验证 2) 接收数据 3) 发送数据,所有这些都是以循环方式完成的,并且在两个客户端都可以完美运行!

我现在打算做的是整合两者,这意味着我必须在类之外进行一些回调才能处理它们。

客户端1<--->主<--->客户端2

我怎样才能做到这一点?

我正在使用扭曲的 getPage

我将发布两个课程之一

如何在课堂外进行回调?

我希望我能表达自己=D

非常感谢

0 投票
1 回答
313 浏览

python - 重载 twisted.client.getPage 以设置客户端套接字的绑定地址!

在过去的 10 个小时里,我一直在努力做到这一点:

使用标准库将我的阻塞 httpclient 翻译成一个扭曲的非阻塞/异步版本。

10 小时后……通过他们的 API 评分——似乎没有人需要这样做。不错的框架,但似乎......只是将套接字设置为不同的接口有点压倒性。

任何蟒蛇大师都可以对此有所了解和/或向我发送正确的方向吗?或者我可能错过的任何文档?谢谢!

0 投票
1 回答
3263 浏览

python - 扭曲的网络代理

我一直在运行这段代码(来自: http: //blog.somethingaboutcode.com/ ?p=155 ):

每当我得到这个并去 127.0.0.1:8000 我得到这个:

每当我设置 firefox 或 chrome 或 opera 以在 localhost:8000 上使用代理时,都没有与代理建立连接(我无法再连接到任何页面,尽管这可能是因为它没有连接到代理)。


好的,它仍然失败,并且当我将 firefox 设置为在 localhost:8000 使用代理并且不直接从 Web 浏览器访问代理时(例如通过在 firefox 的地址栏中键入 localhost:8000),我得到了这个输出

但是,当我直接访问代理时,我得到了关键错误。

我也不能嗅探;Wireshark 似乎没有嗅探本地主机流量,如果我使用 fiddler 2,它会将自己设置为代理(因此我不再使用我的代理服务器)然后工作(因为它使用 fiddler 2 的代理)。