当前位置: 首页 > 知识库问答 >
问题:

在没有SSL证书验证的情况下使用urllib过帐数据

胡俊美
2023-03-14

我需要将数据发布到REST接口,但是接收主机使用的是自签名证书(这一点不会改变),因此我需要忽略我收到的明显的证书验证错误。

我的初始脚本如下所示:

from urllib.request import Request, urlopen
from urllib.parse import urlencode

post_url = "https://myserver.mydomain.com:30005/myapipath"
post_payload = { "event": { "Title": "Something, sometime, something, Python"} }
post_headers = {'Content-Type': 'application/xml'}

omi_post = Request(url=post_url, data=post_payload, headers=post_headers)

urlopen(omi_post)

如前所述,这将生成以下StackTrace:

from urllib.request import Request, urlopen
from urllib.parse import urlencode
import ssl

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

post_url = "https://myserver.mydomain.com:30005/myapipath"
post_payload = { "event": { "Title": "Something, sometime, something, Python"} }
post_headers = {'Content-Type': 'application/xml'}

post_it_already = Request(url=post_url, data=post_payload, headers=post_headers)

urlopen(post_it_already, context=ctx)

回溯(最近一次调用):文件“send_data.py”,第15行,在urlopen(post_it_早已,context=ctx)文件“c:\users\myusername\appdata\local\programs\python\python36\lib\urllib\request.py”,第223行,在urlopen返回opener.open(url,data,timeout)文件“c:\users\myusername\appdata\local\programs\python36\lib\urllib\request.py”,第526行,在openers\myusername\appdata\local\programs\python\python36\lib\http\client.py“,第1239行,在request self._send_request(method,url,body,headers,encode_chunked)文件”c:\users\myusername\appdata\local\programs\python36\lib\http\client.py“,第1285行,在_send_request self.endheaders(body,encode_chunked=encode_chunked)文件”

我不明白为什么它会抱怨将字符串与bytes对象连接在一起。我想它不喜欢我的字符串类型URL和html" target="_blank">数据类型有效载荷和头?然而,我不确定下一步该怎么做。

或者这是一个经典的例子,有人拿了两个单独的示例代码,并期望它们在事实上像花生和泡泡糖一样的时候协同工作?

共有1个答案

南门星河
2023-03-14

您的post_payload应该是“bytes”类型,而不是“str”类型。

从Python文档中:

类URLLib.Request.Request...

 类似资料:
  • 我在使用模块urllib(Python 3.6)时遇到了问题。每次使用该模块时,我都会收到相当于一页的错误。 urllib有什么问题以及如何修复? 这段代码喜欢吐出一口东西: 好像模块本身出了问题。

  • 我在JavaFX应用程序上通过hibernate-validation使用Java Beans验证,因此,没有框架来帮助连接。我将这些依赖项添加到我的项目中: 我发现这可以使<code>modelObject</code>得到验证: 我的问题是,每次验证时都创建一个新的工厂和验证器不好吗?我应该将它们缓存在某个地方并重复使用它们吗?验证器有多昂贵和多线程?

  • 尽管我保留了verify=false,但在Python中还是出现了ssl错误。你能告诉我如何避免吗?但是curl命令使用-k选项。 错误:

  • 问题内容: 我正在尝试通过调用HTTPS REST API 。在开发过程中,我偶然发现以下错误: 因此,我在Google上搜索了一下,并找到了很多可行的解决方案。 使用Jersey客户端的HTTPS https://gist.github.com/outbounder/1069465 如何解决“ java.security.cert.CertificateException:不存在使用者替代名称”

  • 问题内容: 假设我编写了两个Java应用程序:并且它们被部署并在两个单独的服务器上运行(部署到和部署到),并且这两个应用程序需要通过SSL相互通信(双向)。我们还假设每个应用程序都有自己的SSL证书。 我(Java程序员)如何编码并验证彼此的SSL证书?每个CA是否都提供某种我可以使用的RESTful API ?Java是否有自己的证书验证API?我可以使用开放源代码的第三方JAR或服务吗? 当我

  • 我正在尝试通过调用HTTPS REST API。在开发过程中,我偶然发现了以下错误: 所以我用谷歌搜索了一下,找到了大量的解决方案,实际上是有效的。 使用泽西客户端的HTTPS https://gist.github.com/outbounder/1069465 如何修复java.security.cert.证书异常:不存在主题替代名称错误? http://www.mkyong.com/webse