c # Опубликовать данные куки не работает - PullRequest
0 голосов
/ 06 сентября 2011

Хорошо, у меня есть функция, которую я написал, которая позволяет мне публиковать данные с помощью файлов cookie.Проблема в том, что я тестирую его на странице входа в Amazon, и он продолжает отвечать, что мне нужны куки.Вот код

public string DoPost(String url, PostData data, CookieContainer cookies)
{
    HttpWebRequest objWebRequest = (HttpWebRequest)WebRequest.Create(url);
    objWebRequest.CookieContainer = cookies;
    objWebRequest.AllowAutoRedirect = true;
    objWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
    if(data != null)
    {
        String post = data.ToString();
        objWebRequest.Method = "POST";
        objWebRequest.ContentLength = post.Length;
        objWebRequest.ContentType = "application/x-www-form-urlencoded";
        // Post to the login form.
        using(StreamWriter swRequestWriter = new StreamWriter(objWebRequest.GetRequestStream()))
        {
            swRequestWriter.Write(post);
        }
    }

    // Get the response.
    HttpWebResponse objWebResponse =
         (HttpWebResponse)objWebRequest.GetResponse();

    // Read the response
    using(StreamReader srResponseReader = new StreamReader(objWebResponse.GetResponseStream()))
    {
        string strResponseData = srResponseReader.ReadToEnd();
        return strResponseData;
    }
}

И я называю это так

String action = "https://www.amazon.com/gp/flex/sign-in/select.html";
String s = DoPost(action, null, Cookies);

Файлы cookie создаются в моем конструкторе классов следующим образом

CookieContainer Cookies;

public Constructz0r()
{
    Cookies = new CookieContainer();
}

Дело в том, что яЯ даже не публикую никаких данных постов, я просто захожу на страницу, где говорится, что мои куки не включены, хотя я чувствую, что сделал это, напишите в DoPost.

Я дажепопытался использовать эту реализацию WebClient

    public class CookieWebClient : WebClient
    {
        private CookieContainer _cookieContainer = new CookieContainer();

        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            if (request is HttpWebRequest)
            {
                (request as HttpWebRequest).CookieContainer = _cookieContainer;
            }
            return request;
        }
}

И назвать ее так

        using(CookieWebClient ck = new CookieWebClient())
        {
            String s =  ck.DownloadString(action);
        }

И он все еще говорит мне, что куки не включены.

1 Ответ

1 голос
/ 06 сентября 2011

У Amazon есть API для доступа к их сервисам (SOAP).Так что вместо того, чтобы пытаться делать скребки, я настоятельно рекомендую вам использовать их API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...