WebRequest не содержит определения для CookieContainer [duplicate]

Вы можете попробовать этот код. Я нашел его раньше, когда у меня возникла проблема, похожая на вашу.

if (isset($_GET['q1mrks']) && isset($_GET['marks']) && isset($_GET['qt1'])) {
$Q1mrks = $_GET['q1mrks'];
$marks = $_GET['marks'];
$qt1 = $_GET['qt1'];

$qtype_qry = mysql_query("
    SELECT *
    FROM s_questiontypes
    WHERE quetype_id = '$qt1'
");
$row = mysql_fetch_assoc($qtype_qry);
$qcode = $row['quetype_code'];

$sq_qry = "
    SELECT *
    FROM s_question
    WHERE quetype_code = '$qcode'
    ORDER BY RAND() LIMIT $Q1mrks
";
$sq_qry = mysql_query("
    SELECT *
    FROM s_question
    WHERE quetype_code = '$qcode'
    LIMIT $Q1mrks
");
while ($qrow = mysql_fetch_array($sq_qry)) {
    $qm = $qrow['marks'] . "<br />";
    $total += $qm . "<br />";
}
echo $total . "/" . $marks;
}
23
задан leppie 27 January 2016 в 17:27
поделиться

4 ответа

Исходя из ваших комментариев, вы можете подумать о написании метода расширения :

public static bool TryAddCookie(this WebRequest webRequest, Cookie cookie)
{
    HttpWebRequest httpRequest = webRequest as HttpWebRequest;
    if (httpRequest == null)
    {
        return false;
    }

    if (httpRequest.CookieContainer == null)
    {
        httpRequest.CookieContainer = new CookieContainer();
    }

    httpRequest.CookieContainer.Add(cookie);
    return true;
}

Тогда вы можете иметь код типа:

WebRequest webRequest = WebRequest.Create( uri );
webRequest.TryAddCookie(new Cookie("someName","someValue"));
25
ответ дан Rana 3 September 2018 в 17:36
поделиться

Попробуйте что-то вроде этого:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/default.html");
request.CookieContainer.Add(new Cookie("ConstoCookie", "Chocolate Flavour"));
2
ответ дан Peter Mortensen 3 September 2018 в 17:36
поделиться

WebRequest - это абстрактный класс, который не имеет свойства CookieContainer. Кроме того, вы не можете использовать коллекцию заголовков (исключение не реализовано), поэтому любая попытка, например webRequest.Headers.Add («Cookie», «...»), не будет выполнена.

Извините, но у вас есть нет возможности использовать файлы cookie с помощью WebRequest.

Придерживайтесь HttpWebRequest и добавляйте / редактируйте столько куки, которые вам нравятся, используя коллекцию Headers!

6
ответ дан user 3 September 2018 в 17:36
поделиться

Ответ dlev закончил работу, но у меня возникли проблемы с реализацией решения («Параметр« {0} »не может быть пустой строкой.), поэтому я решил написать полный код, если у кого-то еще есть подобные проблемы.

Моя цель состояла в том, чтобы получить html в виде строки, но мне нужно было добавить файлы cookie в веб-запрос. Это функция, которая загружает строку с помощью файлов cookie:

public static string DownloadString(string url, Encoding encoding, IDictionary<string, string> cookieNameValues)
{
    using (var webClient = new WebClient())
    {
        var uri = new Uri(url);
        var webRequest = WebRequest.Create(uri);
        foreach(var nameValue in cookieNameValues)
        {
            webRequest.TryAddCookie(new Cookie(nameValue.Key, nameValue.Value, "/", uri.Host));
        }                
        var response = webRequest.GetResponse();
        var receiveStream = response.GetResponseStream();
        var readStream = new StreamReader(receiveStream, encoding);
        var htmlCode = readStream.ReadToEnd();                
        return htmlCode;
    }
}   

Мы используем код из ответа dlev:

public static bool TryAddCookie(this WebRequest webRequest, Cookie cookie)
{
    HttpWebRequest httpRequest = webRequest as HttpWebRequest;
    if (httpRequest == null)
    {
        return false;
    }

    if (httpRequest.CookieContainer == null)
    {
        httpRequest.CookieContainer = new CookieContainer();
    }

    httpRequest.CookieContainer.Add(cookie);
    return true;
}

Вот как вы используете полный код:

var cookieNameValues = new Dictionary<string, string>();
cookieNameValues.Add("varName", "varValue");
var htmlResult = DownloadString(url, Encoding.UTF8, cookieNameValues);
0
ответ дан Xavier Peña 3 September 2018 в 17:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: