问题标签 [httplib2]

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 投票
4 回答
138783 浏览

python - 104, 'Connection reset by peer' 套接字错误,或关闭套接字何时导致 RST 而不是 FIN?

我们正在并行开发 Python Web 服务和客户端网站。当我们从客户端向服务发出 HTTP 请求时,一个调用会在 socket.py 中持续引发一个 socket.error,如下所示:

当我用wireshark收听时,“好”和“坏”的反应看起来非常相似:

  • 由于 OAuth 标头的大小,请求被分成两个数据包。该服务使用 ACK 响应两者
  • 服务发送响应,每个标头一个数据包(HTTP/1.0 200 OK,然后是 Date 标头等)。客户端用 ACK 响应每个。
  • (好请求)服务器发送一个FIN、ACK。客户端以 FIN、ACK 响应。服务器响应 ACK。
  • (错误请求)服务器发送 RST、ACK,客户端不发送 TCP 响应,客户端引发 socket.error。

Web 服务和客户端都在运行 glibc-2.6.1 的 Gentoo Linux x86-64 机器上运行。我们在同一个 virtual_env 中使用 Python 2.5.2。

客户端是一个 Django 1.0.2 应用程序,它调用 httplib2 0.4.0 来发出请求。我们使用 OAuth 签名算法对请求进行签名,OAuth 令牌始终设置为空字符串。

该服务正在运行 Werkzeug 0.3.1,它使用 Python 的 wsgiref.simple_server。我通过 wsgiref.validator 运行 WSGI 应用程序,没有任何问题。

看起来这应该很容易调试,但是当我在服务端跟踪一个好的请求时,它看起来就像是错误的请求,在 socket._socketobject.close() 函数中,将委​​托方法变成了虚拟方法。当 send 或 sendto(不记得是哪个)方法被关闭时,发送 FIN 或 RST,客户端开始处理。

“对等连接重置”似乎将责任归咎于服务,但我也不信任 httplib2。客户有错吗?

** 进一步调试 - 看起来像 Linux 上的服务器 **

我有一台 MacBook,所以我尝试在一台上运行该服务,在另一台上运行客户端网站。Linux 客户端调用 OS X 服务器时没有错误 (FIN ACK)。OS X 客户端调用带有错误的 Linux 服务(RST ACK 和 (54, 'Connection reset by peer'))。因此,它看起来像是在 Linux 上运行的服务。是 x86_64 吗?一个糟糕的 glibc?wsgiref? 还在找...

** 进一步测试 - wsgiref 看起来很不稳定 **

我们已经使用 Apache 和 mod_wsgi 投入生产,并且连接重置已经消失。请参阅下面的答案,但我的建议是记录连接重置并重试。这将使您的服务器在开发模式下运行良好,并在生产中稳定运行。

0 投票
1 回答
1337 浏览

python - Python 库 httplib2 是否使用 GET 字符串缓存 URI?

在以下示例中,正确缓存了什么?是否有一个 Vary-Header 我必须为 GET 字符串设置服务器端?

0 投票
2 回答
1963 浏览

python - Twisted 是 httplib2/socket 的替代品吗?

许多 python 库,甚至是最近编写的库,都使用 httplib2 或套接字接口来执行网络任务。

由于它们的阻塞特性,它们显然比 Twisted 更容易编码,但我认为这是将它们与其他代码集成时的一个缺点,尤其是 GUI 代码。如果您希望在避免多线程的同时实现可扩展性、并发性或 GUI 集成,那么 Twisted 是一个自然的选择。

所以我会对这些问题的意见感兴趣:

  1. 是否应该使用 Twisted 编写新的网络代码(小型命令行工具除外)?
  2. 你会在同一个项目中混合使用 Twisted、http2lib 或 socket 代码吗?
  3. Twisted pythonic 是否适用于大多数库(它比替代品更复杂,引入对非标准包的依赖......)?

编辑:请让我换一种说法。您是否觉得使用 Twisted 编写新的库代码可能会阻碍其采用?Twisted 具有明显的优势(尤其是 gimel 所述的可移植性和可扩展性),但它不是核心 python 库这一事实可能被某些人认为是一个缺点。

0 投票
1 回答
1604 浏览

python - 使用 httplib2 处理身份验证和代理服务器

我正在尝试测试与需要对我打算使用的操作进行身份验证的 Nexus 服务器的交互,但我还需要处理内部代理服务器。

根据我的(有限的)理解,我可以向开瓶器添加多个处理程序。但是我仍然收到 401 响应。我已经检查了用户名和密码是否有效。我不确定是否需要 cookie 来执行此操作,如果需要,它们将如何包含在内。有什么建议么?

这是生成的 URLError 的 headers 字段:

更新 似乎 Nexus 实现了Restlet 的 AuthenticationHelper的自定义版本。感谢亚历克斯,我知道要寻找什么。

0 投票
1 回答
1415 浏览

python - 实现自定义 Python 身份验证处理程序

上一个问题的答案显示 Nexus 实现了一个名为“NxBASIC”的自定义身份验证帮助程序。

如何开始在 python 中实现处理程序?


更新:

根据 Alex 的建议实施处理程序看起来是正确的方法,但无法尝试从 authreq 中提取方案和领域。authreq 的返回值为:

AbstractBasicAuthHandler.rx.search(authreq) 只返回一个元组:

所以 scheme,realm = mo.groups() 失败。从我有限的正则表达式知识看来,来自 AbstractBasicAuthHandler 的标准正则表达式应该匹配方案和领域,但似乎不匹配。

正则表达式是:


更新 2:从检查 AbstractBasicAuthHandler 来看,默认处理是:

更改为此有效。我现在只需要针对正确的领域设置密码。谢谢亚历克斯!

0 投票
3 回答
4632 浏览

python - 如何修复此错误或对此错误进行例外处理

我正在创建一个从任何网页获取图像网址的代码,该代码在 python 中并使用 BeutifulSoup 和 httplib2。当我运行代码时,我得到下一个错误:

有人可以向我解释如何修复或排除错误

0 投票
6 回答
12700 浏览

javascript - 使用 JavaScript 功能获取命令行 URL

我在 python 中使用 curl、php 和 httplib2 来获取 URL。

但是,有些页面在加载页面后使用 JavaScript (AJAX) 检索数据,然后它们只是覆盖页面的特定部分。

那么,是否有任何可以处理 JavaScript 的命令行实用程序?

要知道我的意思,请访问:monster.com 并尝试寻找工作。

您将看到 Ajax 正在获取作业列表。所以,如果我想根据我的关键字搜索来获取工作,我会得到没有工作的页面。

但是通过浏览器它可以工作。

0 投票
2 回答
5361 浏览

python - 使用 httplib2.Http() 对象时的最佳实践

我正在编写一个带有这样的类的 pythonic Web API 包装器


如您所见,我正在使用该_http()方法来简化与httplib2.Http()对象的交互。这个方法在类中经常被调用,我想知道与这个对象交互的最佳方式是什么:

  • 在 中创建对象,__init__然后在调用方法时重用_http()(如上面的代码所示
  • httplib2.Http()或者为方法的每次调用在方法内部创建对象_http()(如下面的代码示例所示

0 投票
1 回答
656 浏览

python - 使用 Python 通过 HTTP 下载压缩内容

使用 Python 下载网页时如何利用 HTTP 1.1 的压缩?

我目前正在使用内置的urllib模块来下载网页内容。通读文档,我找不到任何确实使用压缩的信息。

它是否已经内置在urllib中,还是我可以使用另一个库?

0 投票
4 回答
4625 浏览

python - httplib2,如何设置多个cookie?

正如您可能知道的那样,通常情况下,HTTP 服务器发送的不仅仅是 session_id cookie;但是,httplib2 使用字典处理 cookie,如下所示:

那么,如何设置额外的 cookie?如果用字典处理,我不能有双 Cookie 键:S。

谢谢你的时间。