标签: httplib2

如何使用httplib2进行共同证书身份验证

我正在使用httplib2从我的服务器向另一个Web服务发出请求.我们想要使用相互证书身份验证.我看到如何使用证书进行传出连接(h.set_certificate),但如何检查应答服务器使用的证书?

此票证似乎表明httplib2本身并不这样做,并且只有关于在哪里查看的模糊建议.

可能吗?我是否需要在较低级别进行攻击?

python ssl httplib2

8
推荐指数
1
解决办法
5997
查看次数

ImportError:没有名为httplib2的模块

我有一个Python 2.7 GAE应用程序,它已经具有很多功能.现在我想要与Google API集成.

在我在Mac OSX上运行的IDE(PyCharm)中,我将以下行添加到我的应用程序的主程序中:

import httplib2
pass
Run Code Online (Sandbox Code Playgroud)

当我命令单击"httplib2"时,IDE 在编辑器面板中打开"httplib2-0.8-py2.7.egg/httplib2/init.py ",因此IDE显然知道httplib2在哪里.但运行应用程序,我得到标题中显示的错误.

为了进一步测试,我在上面显示的两个语句上放置了断点,然后在调试模式下运行应用程序.当它到达import语句时,我立即单击"Resume Program"图标.

然后控制台显示:

ImportError: No module named httplib2
Run Code Online (Sandbox Code Playgroud)

程序然后循环.也就是说,它不会终止,但它永远不会到达"通过"语句.

所以IDE似乎知道"httplib2"在哪里,但Python似乎并不存在.任何有关如何"导入httplib2"成功的帮助将不胜感激.谢谢.

python google-app-engine httplib2 importerror

8
推荐指数
1
解决办法
8480
查看次数

Python httplib2,AttributeError:'set'对象没有属性'items'

我正在玩Python库httplib2.以下是我的代码.

import urllib.parse
import httplib2

httplib2.debuglevel = 1

http = httplib2.Http()

url = "http://login.sina.com.cn/hd/signin.php"
body = {"act": "1",
        "entry": "vblog",
        "password": "P@$sW0rd",
        "reference": "http://vupload.you.video.sina.com.cn/u.php?m=1&cate=0",
        "reg_entry": "vblog",
        "remLoginName": "on",
        "username": "this_is_user_name",
        "x": "",
        "y": ""}

headers = {"Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
           "Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
           "Accept-Encoding", "gzip,deflate",
           "Accept-Language", "en-us,en;q=0.5",
           "Connection", "keep-alive",
           "Content-Length", "181",
           "Content-Type", "application/x-www-form-urlencoded",
           "Host", "login.sina.com.cn",
           "Keep-Alive", "115",
           "Referer", "http://login.sina.com.cn/hd/signin.php?entry=vblog&r=http%3A%2F%2Fvupload.you.video.sina.com.cn%2Fu.php%3Fm%3D1%26cate%3D0",
           "User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16"}

response, content = http.request(url, 'POST', headers=headers, body=urllib.parse.urlencode(body))
Run Code Online (Sandbox Code Playgroud)

当我执行它时,我收到错误:

Microsoft Windows XP …
Run Code Online (Sandbox Code Playgroud)

python httplib2

7
推荐指数
1
解决办法
2万
查看次数

Python下的间歇性"sslv3警报握手失败"

我有一个用JBoss编写的用Java编写的REST API.最近我们将JVM从1.6更新到1.7.这开始只引起我们连接的Python客户端的问题.间歇性地,Python客户端正在获得握手失败.我们写了一个非常简单的测试来重现问题:

import httplib2

for i in range(1,500):
    print i
    response, content = httplib2.Http(disable_ssl_certificate_validation=True).request('https://server.com:8443',)
Run Code Online (Sandbox Code Playgroud)

提供以下输出:

.
.
.
64
65
66
67
Traceback (most recent call last):
  File "api_test/test.py", line 6, in <module>
    response, content = httplib2.Http(disable_ssl_certificate_validation=True).request('https://server.com:8443/rest/solidtumor/2012/id/50d3216c092c8554b8b9f384?glossary=true&api_key=APIKEY',)
  File "/home/hostovic/api_test/httplib2/__init__.py", line 1445, in request
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
  File "/home/hostovic/api_test/httplib2/__init__.py", line 1197, in _request
    (response, content) = self._conn_request(conn, request_uri, method, body, headers)
  File "/home/hostovic/api_test/httplib2/__init__.py", line 1133, in _conn_request
    conn.connect()
  File "/home/hostovic/api_test/httplib2/__init__.py", line 914, …
Run Code Online (Sandbox Code Playgroud)

python java ssl jboss httplib2

7
推荐指数
1
解决办法
7259
查看次数

这是httplib2的错误吗?

我的python程序使用httplib2.Http来发出http请求.一旦我需要生成一个请求,我创建一个httplib2.Http对象,以便我的程序经常创建/销毁httplib2.Http对象.

我发现由于达到最大打开文件数,我的程序很容易崩溃.检查/ proc // fd,打开套接字fds太多了.这个问题使我不得不深入研究httplib2源代码.

然后我发现,在httplib2.Http._conn_request方法中,有这样的代码:

        else:
            content = ""
            if method == "HEAD":
                conn.close()
            else:
                content = response.read()
            response = Response(response)
            if method != "HEAD":
                content = _decompressContent(response, content)
        break
Run Code Online (Sandbox Code Playgroud)

这表明套接字仅在http方法为HEAD时关闭.也许httplib2想要以某种方式重用套接字.但是Http类没有close()方法.这意味着当我发出Http请求时,套接字将不会关闭,直到我的进程终止.

然后我修改了代码:

        else:
            content = ""
            if method == "HEAD":
                conn.close()
            else:
                content = response.read()
            response = Response(response)
            if method != "HEAD":
                content = _decompressContent(response, content)
                conn.close() # I ADD THIS CLOSE
        break
Run Code Online (Sandbox Code Playgroud)

在那之后,我的计划运作良好.

但我仍然很好奇,如果这是httplib2的错误,因为httplib2是一个非常古老而常见的lib.

python httplib2

7
推荐指数
1
解决办法
1470
查看次数

Twisted是httplib2/socket的替代品吗?

许多python库,即使是最近编写的,也使用httplib2或套接字接口来执行网络任务.

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

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

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

编辑:请让我用另一种方式说出来.您是否觉得使用Twisted编写新的库代码可能会增加其采用的障碍?Twisted有明显的好处(特别是gimel所说的可移植性和可伸缩性),但是它不是一个核心python库的事实可能会被一些人认为是一个缺点.

python sockets networking twisted httplib2

6
推荐指数
2
解决办法
1934
查看次数

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

我正在编写一个类似于此类的pythonic Web API包装器

import httplib2
import urllib

class apiWrapper:

    def __init__(self):
        self.http = httplib2.Http()

    def _http(self, url, method, dict):
        '''
        Im using this wrapper arround the http object
        all the time inside the class
        '''
        params = urllib.urlencode(dict)
        response, content = self.http.request(url,params,method)
Run Code Online (Sandbox Code Playgroud)

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

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

import httplib2
import urllib


class apiWrapper:

    def __init__(self):

    def _http(self, url, method, dict):
        '''Im using this wrapper …
Run Code Online (Sandbox Code Playgroud)

python httplib2

6
推荐指数
2
解决办法
5093
查看次数

httplib2,如何设置多个cookie?

您可能已经意识到,HTTP服务器通常会发送的不仅仅是session_id cookie; 但是,httplib2使用字典处理cookie,如下所示:

response, content = http.request(url, 'GET', headers=headers)

headers = {'Cookie': response['set-cookie']}

url = 'http://www.example.com/home'   
response, content = http.request(url, 'GET', headers=headers)
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的时间.

python cookies httplib2 cookiejar

6
推荐指数
1
解决办法
4352
查看次数

如何在Windows 7上使用Python 3和httplib2调用AWS?

我使用httplib2来调用Amazon Web Services(AWS):

http = httplib2.Http(cache='.cache')
response, content = http.request('https://sdb.amazonaws.com/...')
Run Code Online (Sandbox Code Playgroud)

但它没有找到CA(我认为):

File "C:\Python32\lib\site-packages\httplib2\__init__.py", line 1059, in request self.disable_ssl_certificate_validation)
File "C:\Python32\lib\site-packages\httplib2\__init__.py", line 772, in __init__ context.load_verify_locations(ca_certs)
IOError: [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 有什么我需要做的事情来配置我的操作系统和环境来实现这个目的吗?
  2. 我已经看过很多关于确保在Python 2中为SSL构建套接字库的帖子; 这适用于Python 3吗?

谢谢!

ssl httplib2 amazon-web-services windows-7 python-3.x

6
推荐指数
1
解决办法
1448
查看次数

Google API +代理+ httplib2

我目前正在运行一个脚本,使用 Phyton包(基于客户端对象)从Google Analytics中提取数据

- >我的脚本完美无需任何代理.

但我必须把它放在我的公司代理之后,所以我需要调整我的httplib2.Http()对象来嵌入代理信息.

在httplib2 doc 1之后,我试过:

pi = httplib2.proxy_info_from_url('http://user:pwd@someproxy:80')
httplib2.Http(proxy_info=pi).request("http://www.google.com")
Run Code Online (Sandbox Code Playgroud)

但它没有用.我总是得到一个超时错误,有或没有代理信息(因此不考虑参数中的proxy_info)

我还在包(v1.5.6)中下载了socks 并尝试"wrapmodule"httplib2,如下所述:https: //github.com/jcgregorio/httplib2/issues/205

socks.setdefaultproxy(socks.PROXY_TYPE_HTTP, "proxyna", port=80, username='p.tisserand', password='Telematics12')
socks.wrapmodule(httplib2)
h = httplib2.Http()
h.request("http://google.com")
Run Code Online (Sandbox Code Playgroud)

但我得到一个IndexError :(元组索引超出范围)

与此同时,当我使用包时,这个简单的代码完美地运行:

os.environ["HTTP_PROXY"] = "http://user:pwd@someproxy:80"
req = requests.get("http://www.google.com")
Run Code Online (Sandbox Code Playgroud)

问题是需要符合googleapiclient要求并提供htpplib2.Http()客户端对象.

proxy google-api httplib2 google-analytics-api python-requests

6
推荐指数
1
解决办法
2207
查看次数