Не отправляет Get-запрос когда кодировка указывается из переменой

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
67
Баллы
28
Пару часов промучился используя разные костыли, в итоге Get так и не уходит.
Есть такой снипет
C#:
var url = project.Variables["Url"].Value;
var Host = System.Text.RegularExpressions.Regex.Match(project.Variables["Url"].Value, @"[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,9}").Value;
var ContentType = "";

var response = ZennoPoster.HttpGet(
    url,
    "",
    "utf-8",
    InterfacesLibrary.Enums.Http.ResponceType.HeaderOnly,
    5000,
    "",
    "",
    true,
    5,
    new []
    {
        "Host: "+Host,
        "User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",
        "Accept-Encoding: gzip, deflate, br",
        "Accept-Language: ru-RU,ru;q=0.7,en-US;q=0.5,en;q=0.3",
        "Connection: keep-alive",
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
        "Cookie: ",
        "Upgrade-Insecure-Requests: 1"
        
    }
);

// Выдергиваем Regex кодировку
ContentType = System.Text.RegularExpressions.Regex.Match(response, @"(?<=charset=).*").Value;


//ContentType = "windows-1251";
response = ZennoPoster.HttpGet(
    url,
    "",
    ContentType,
    InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    5000,
    "",
    "",
    true,
    5,
    new []
    {
        "Host: "+Host,
        "User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",
        "Accept-Encoding: gzip, deflate, br",
        "Accept-Language: ru-RU,ru;q=0.7,en-US;q=0.5,en;q=0.3",
        "Connection: keep-alive",
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
        "Cookie: ",
        "Upgrade-Insecure-Requests: 1"
        
    }
);

project.Variables["DOM"].Value = response;

if(response == "")
{
    project.SendErrorToLog("Пустой ответ", true);
    return null;
}
Тут оправляется первый гет на заголовки и выдергивается кодировка, второй гет отправляет на получение тела в нужной кодировке сайта. Но проблема в том, что если кодировка указывается из переменной, то гет просто не отправляется, во вкладки трафик он даже не получает код. Если кодировку указать в ручную то гет отправляется. Тоже самое если забивать кодировку в переменную в ручную, то отправляется, если через Regex выдергивать то ловлю ошибку "Ссылка на объект не указывает на экземпляр объекта."

Как это можно исправить?
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
У Вас проблема в регулярке на 30 строке:
C#:
ContentType = System.Text.RegularExpressions.Regex.Match(response, @"(?<=charset=).*").Value;
Её нужно заменить на:
C#:
ContentType = System.Text.RegularExpressions.Regex.Match(response, @"(?<=charset=)[^\s]+").Value;
Так как в Вашем варианте в переменную попадает лишний пробельный символ, который и ломает запрос.

И вдогонку :-)
User-agent и Cookie указываются в отдельно, их не нужно прописывать в AdditionalHeaders.
 
  • Спасибо
Реакции: b1zar

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
67
Баллы
28
У Вас проблема в регулярке на 30 строке:
C#:
ContentType = System.Text.RegularExpressions.Regex.Match(response, @"(?<=charset=).*").Value;
Её нужно заменить на:
C#:
ContentType = System.Text.RegularExpressions.Regex.Match(response, @"(?<=charset=)[^\s]+").Value;
Так как в Вашем варианте в переменную попадает лишний пробельный символ, который и ломает запрос.

И вдогонку :-)
User-agent и Cookie указываются в отдельно, их не нужно прописывать в AdditionalHeaders.
Вот все попробовал, а на спец. символы проверить не догадался:D. User-agent и Cookie почему там не указываются, я такой гет давно использую и проблем не было?
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)