【问题标题】:multiple post requests same session c#多个帖子请求同一个会话c#
【发布时间】:2018-05-29 13:45:10
【问题描述】:

我正在编写一个脚本,该脚本在网站上运行、将商品添加到购物车并结帐。 我设法添加到购物车,但是当我想结账时,就像购物车里什么都没有。 如何使用同一会话添加到购物车/结帐?

这是我的代码:

        var request = (HttpWebRequest)WebRequest.Create(url_add_to_cart);

        var postData = "utf8=✓";
        postData += "style=" + data_style_id;
        postData += "size=" + size;
        postData += "commit=add to basket";
        var data = Encoding.ASCII.GetBytes(postData);

        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = data.Length;
        using (var stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }
        var response = (HttpWebResponse)request.GetResponse();
        var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

        //checkout----------------
        var url_checkout = link_general + "/checkout.json";
        var request2 = (HttpWebRequest)WebRequest.Create(url_checkout);

        var postData2 = "utf8=✓";
        postData2 += "order[billing_name]=toto";
        postData2 += "order[email]=toto@gmail.com";

        var data2 = Encoding.ASCII.GetBytes(postData2);

        request2.Method = "POST";
        request2.ContentType = "application/x-www-form-urlencoded";
        request2.ContentLength = data2.Length;

        using (var stream2 = request2.GetRequestStream())
        {
            stream2.Write(data2, 0, data2.Length);
        }

        var response2 = (HttpWebResponse)request2.GetResponse();

        var responseString2 = new StreamReader(response2.GetResponseStream()).ReadToEnd();


        Console.WriteLine(responseString2);

当我执行结帐请求时,它不起作用并获取网站 html 主页的源代码

非常感谢您的回答

【问题讨论】:

  • 您的代码需要捕获站点设置的 cookie,然后将它们包含在后续请求标头中。
  • 我正在尝试使用 cookie 容器,但无法使其工作

标签: c# post http-post httpwebrequest webrequest


【解决方案1】:

您需要将request.CookieContainer 存储在局部变量中,并且每次您需要发送新请求时重新设置它

private CookieContainer cookieContainer;

private void SendRequest()
{
    HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
    request.ContentType = "application/x-www-form-urlencoded";
    request.Method = "POST";

    if (this.cookieContainer != null)                
        request.CookieContainer = this.cookieContainer;                
    else                
        request.CookieContainer = new CookieContainer();                
    ...
    ...
    ...

    this.cookieContainer = request.CookieContainer;
}

并将& 添加到postData 行的末尾

【讨论】:

  • 小问题,你编辑了。为什么要检查它是否为空?
  • 此外,我真的需要做:获取data_length吗?
  • 我发了另一个帖子,我会把链接发给你:stackoverflow.com/questions/50587841/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
相关资源
最近更新 更多