How do I set a cookie on HttpClient's HttpRequestMessage

后端 未结 5 1218
眼角桃花
眼角桃花 2020-11-22 09:57

I am trying to use the web api\'s HttpClient to do a post to an endpoint that requires login in the form of an HTTP cookie that identifies an account (this is o

5条回答
  •  佛祖请我去吃肉
    2020-11-22 10:30

    After spending hours on this issue, none of the answers above helped me so I found a really useful tool.

    Firstly, I used Telerik's Fiddler 4 to study my Web Requests in details

    Secondly, I came across this useful plugin for Fiddler:

    https://github.com/sunilpottumuttu/FiddlerGenerateHttpClientCode

    It will just generate the C# code for you. An example was:

            var uriBuilder = new UriBuilder("test.php", "test");
            var httpClient = new HttpClient();
    
    
            var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, uriBuilder.ToString());
    
    
    
            httpRequestMessage.Headers.Add("Host", "test.com");
            httpRequestMessage.Headers.Add("Connection", "keep-alive");
         //   httpRequestMessage.Headers.Add("Content-Length", "138");
            httpRequestMessage.Headers.Add("Pragma", "no-cache");
            httpRequestMessage.Headers.Add("Cache-Control", "no-cache");
            httpRequestMessage.Headers.Add("Origin", "test.com");
            httpRequestMessage.Headers.Add("Upgrade-Insecure-Requests", "1");
        //    httpRequestMessage.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            httpRequestMessage.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36");
            httpRequestMessage.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
            httpRequestMessage.Headers.Add("Referer", "http://www.translationdirectory.com/");
            httpRequestMessage.Headers.Add("Accept-Encoding", "gzip, deflate");
            httpRequestMessage.Headers.Add("Accept-Language", "en-GB,en-US;q=0.9,en;q=0.8");
            httpRequestMessage.Headers.Add("Cookie", "__utmc=266643403; __utmz=266643403.1537352460.3.3.utmccn=(referral)|utmcsr=google.co.uk|utmcct=/|utmcmd=referral; __utma=266643403.817561753.1532012719.1537357162.1537361568.5; __utmb=266643403; __atuvc=0%7C34%2C0%7C35%2C0%7C36%2C0%7C37%2C48%7C38; __atuvs=5ba2469fbb02458f002");
    
    
            var httpResponseMessage = httpClient.SendAsync(httpRequestMessage).Result;
    
            var httpContent = httpResponseMessage.Content;
            string result = httpResponseMessage.Content.ReadAsStringAsync().Result;
    

    Note that I had to comment out two lines as this plugin is not totally perfect yet but it did the job nevertheless.

    DISCLAIMER: I am not associated or endorsed by either Telerik or the plugin's author in anyway.

提交回复
热议问题