Оператор == всегда предназначен для сравнения ссылок на объекты, тогда как метод сравнения строк .equals () переопределяется для сравнения содержимого:
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // It prints false (reference comparison)
System.out.println(s1.equals(s2)); // It prints true (content comparison)
попробуйте использовать этот
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/
В бесстыдной попытке украсть некоторые голоса SecurityProtocol
является Enum
с атрибутом [Flags]
. Таким образом, вы можете сделать это:
[Net.ServicePointManager]::SecurityProtocol =
[Net.SecurityProtocolType]::Tls12 -bor `
[Net.SecurityProtocolType]::Tls11 -bor `
[Net.SecurityProtocolType]::Tls
Или, поскольку это PowerShell, вы можете позволить ему разобрать строку для вас:
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
Тогда вам не требуется технически знаю версию TLS.
Я скопировал и вставил это из сценария, который я создал после прочтения этого ответа, потому что я не хотел перебирать все доступные протоколы, чтобы найти тот, который работал. Конечно, вы могли бы сделать это, если хотите.
Заключительное примечание. У меня есть исходный (минус SO редактирует) оператор в моем профиле PowerShell, так что он находится в каждом сеансе, который я запускаю Теперь. Это не совсем безопасно, так как все еще есть некоторые сайты, которые просто терпят неудачу, но я уверен, что сообщение, о котором идет речь, реже.
[Net.ServicePointManager]::SecurityProtocol = "Tls12, Tls11, Tls, Ssl3"
. Помните, что SSLv3 и TLSv1.0 устарели из-за POODLE, поэтому используйте их на свой страх и риск.
– jordanbtucker
1 March 2018 в 20:43