Ответ 1
URL-адрес zvoxaudio.com, из ваших комментариев, довольно сложный. У них есть некоторое обнаружение бота для добавления предметов в корзину. Используемая вами ссылка, похоже, не работает независимо от того, что, я думаю, она использует id с истекшим номером; Я смог использовать его, обновив id до 4007001 и изменив его на "https". Однако эта ссылка добавляет элемент в корзину, и сайт не позволяет ботам добавлять предметы в корзину, сайт возвращает ошибку 400 с этим ключом: значение в заголовках:
X-Error-Message: Bots are not allowed to add items to cart
Попробуйте добавить UserAgent к вашему запросу следующим образом:
myRequest.UserAgent = "Nada";
С этими небольшими изменениями работает ссылка ZVOXAUDIO!
Если вы хотите сохранить URL-адрес в качестве запроса "https", просто добавьте его в свой код.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Это требуется, потому что ZVOXAUDIO не поддерживает протоколы TLS 1.0 или более ранних версий. Если версия .NET, которую вы используете, не поддерживает TLS 1.2, вы можете использовать SecurityProtocolType.Tls11, поскольку ZVOXAUDIO еще поддерживает TLS 1.1.
Но поскольку, по-видимому, вы пытаетесь запустить этот запуск на максимально возможном количестве сайтов, возможно, вы не хотите разрешать только TLS 1.2, поскольку старые серверы могут его не поддерживать. Я бы установил протокол безопасности следующим образом:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 |
SecurityProtocolType.Tls11 |
SecurityProtocolType.Tls |
SecurityProtocolType.Ssl3;
В качестве предложения вы можете установить обратный вызов проверки сертификата сервера и протокол безопасности вне вашего цикла, поскольку он является статическим параметром для всех запросов. Также, если вы используете синтаксис С#, метод Dispose заботится о закрытии и удалении переменных WebResponse и StreamReader для вас. И С# представила "var" еще в .NET 3.0, возможно, вы захотите начать ее обнимать, предполагая, что вы используете 3.0 или более новую структуру. Если вы хотите посмотреть, как это будет выглядеть, посмотрите ниже.
Убедитесь, что у вас есть эти операции:
using System;
using System.IO;
using System.Net;
Затем поместите эти две строки в статический конструктор вашей формы или объекта, я предполагаю, что вы используете форму прямо сейчас:
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
Тогда ваши два метода будут выглядеть так:
private void button4_Click(object sender, EventArgs e)
{
try
{
for (var i = 0; i < listBox2.Items.Count; i++)
{
var response = Code(listBox2.Items[i].ToString() + "\'");
if (response.ToLower().Contains("mysql"))
{
Console.WriteLine("positive " + listBox2.Items[i].ToString());
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public static string Code(string url)
{
var webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.MaximumAutomaticRedirections = 4;
webRequest.MaximumResponseHeadersLength = 4;
webRequest.UserAgent = "Mozilla/5.0 (Taco2) Gecko/20100101";
webRequest.Credentials = CredentialCache.DefaultCredentials;
webRequest.Method = "GET";
using (var webResponse = webRequest.GetResponse())
{
using (var sr = new StreamReader(webResponse.GetResponseStream(), System.Text.Encoding.UTF8))
{
return sr.ReadToEnd();
}
}
}
Счастливое кодирование! Не стесняйтесь задавать любые вопросы в комментариях ниже.