我在我的 Vala 应用程序中使用 libsoup 下载图像。但是我的程序总是因 SSL_FAILED 代码而崩溃(它不在程序中,这是我的错误)并且没有下载图像。我在我的应用程序中将 ssl_strict 切换为 false,但它没有按照我想要的方式工作。
这是我下载图片的函数:
var session = new Soup.Session ();
session.ssl_strict = false;
var message = new Soup.Message ("GET", url);
message.tls_errors = GLib.TlsCertificateFlags.VALIDATE_ALL;
session.send_message (message);
if (message.status_code != Soup.Status.OK)
error("Something wrong with downloading."); // here it crashes
我检查了文档,它说:“如果您将“ssl-strict”设置为 FALSE,那么所有证书都将被接受,您将需要调用 soup_message_get_https_status() 来区分有效证书和无效证书。(这可以是使用,例如,如果您想在发出某种警告后接受无效证书。)”。
我不知道收到的证书是否无效,但显然是的。而且文档只字不提如何使用它来接受无效的证书。那么问题来了:如何使用这个函数来接受所有(甚至是无效的)证书?
最佳答案
试试这个。 (未经测试的代码!)
var session = new Soup.Session ();
session.ssl_strict = false;
// drop this line
//message.tls_errors = GLib.TlsCertificateFlags.VALIDATE_ALL;
var message = new Soup.Message ("GET", url);
session.send_message (message);
// Now you can check the message.tls_errors property for why the
// certificate validation failed. E.g.:
if (message.tls_errors == TlsCertificateFlags.UNKNOWN_CA)
print ("Unknown CA\n");
关于ssl - 如何在 libsoup 中使用 HTTPS 接受所有证书(甚至无效)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27205532/