简体   繁体   English

多个帖子请求同一会话C#

[英]multiple post requests same session c#

I'm coding a script that goes on a website, adds to cart an item, and checkout. 我正在编写一个脚本,该脚本在网站上发布,将商品添加到购物车并结帐。 I manage to add to cart but when I want to checkout it's like nothing is in the cart. 我设法添加到购物车,但是当我要结帐时,就像购物车中没有东西。 How can I add to cart/ checkout using the same session? 如何使用同一会话将其添加到购物车/结帐?

Here is my code: 这是我的代码:

        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);

When I do the checkout request it doesn't work and get the source corde of the website html home page 当我执行结帐请求时,它不起作用并获得网站html主页的源代码

Thank you very much for your answers 非常感谢您的回答

You need to store request.CookieContainer in local variable and every time you need to send new request set it again 您需要将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;
}

And add & to end of postData lines 并在postData行的末尾添加&

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM