首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个会话(JSESSIONID)/cookie中发出两个POST请求

如何在一个会话(JSESSIONID)/cookie中发出两个POST请求
EN

Stack Overflow用户
提问于 2016-05-12 17:51:03
回答 1查看 1.4K关注 0票数 1

这是个复杂的问题。已经过了两天半的研究和调试,我现在在这里。

目标:从政府GST/HST查找网站获取数据。由于它是旧的(作为Java使用),并且不支持REST,所以我必须手动对网站执行2个web请求。(经过整整一天的调试,我发现在开始搜索之前,我必须首先接受这些条款和建议,因为接受被存储在cookie中。网站的链接在这里:政府搜索网站)

遇到的问题:Flowgear的web请求节点不允许您指定一个' cookie‘头,所以我不能告诉它在两个单独的请求上使用特定的cookie。所以我不得不这么做:

注意:我试图在两个POST请求中使用相同的Cookie,以便为特定的会话获取适当的数据。

当前的问题:我得到了这个错误:“脚本执行错误:不能用这种动词类型发送内容体。”

代码:

代码语言:javascript
复制
using System;
using System.IO;
using System.Collections.Generic;
using System.Xml;
using System.Linq;
using System.Xml.Linq;
using System.Net;
using System.Text;

namespace CSharpScript
{
  public partial class Processor
  {  
    public object Process()
    {
        var request = (HttpWebRequest)WebRequest.Create("https://www.businessregistration-inscriptionentreprise.gc.ca/ebci/brom/registry/registryservlet");
        var postData = "iagree=yes";
        var data = Encoding.ASCII.GetBytes(postData);

        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = data.Length;
        request.KeepAlive = true;
        request.Host  = "www.businessregistration-inscriptionentreprise.gc.ca";
        Uri target = new Uri("https://www.businessregistration-inscriptionentreprise.gc.ca/ebci/brom/registry/registryservlet");
        CookieContainer reqCookies = new CookieContainer();
        request.CookieContainer = reqCookies;
        request.CookieContainer.Add(new Cookie("id","YxmlT6nC0FPUakMqOF7S5ZGM-URCkTR-sjddOY02Gz2XfOodrOia!1465666898"){ Domain = target.Host });
        //request.Headers["Cookie"] = "YxmlT6nC0FPUakMqOF7S5ZGM-URCkTR-sjddOY02Gz2XfOodrOia!1465666898";
        using (var stream = request.GetRequestStream())
        {
          stream.Write(data, 0, data.Length);
         }

        var response = (HttpWebResponse)request.GetResponse();
        var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
        //Part 2 
        var request2 = (HttpWebRequest)WebRequest.Create("https://www.businessregistration-inscriptionentreprise.gc.ca/ebci/brom/registry/registryPromptSubmit.do");
        var postData2 = "businessName=COMPANYNAMEASSTRINGGOESHERE";
        postData2 += "&businessNumber=SOMENUMBERGOESHERE";
        postData2 += "&requestDate=2014-09-02";
        var data2 = Encoding.ASCII.GetBytes(postData2);

        request2.Method = "POST";
        request2.ContentType = "application/x-www-form-urlencoded";
        request2.ContentLength = data2.Length;
        request2.KeepAlive = true;
        request2.Host  = "www.businessregistration-inscriptionentreprise.gc.ca";
        //Uri target = new Uri("https://www.businessregistration-inscriptionentreprise.gc.ca/ebci/brom/registry/registryservlet");
        request2.CookieContainer = reqCookies;
        //request.Headers["Cookie"] = "YxmlT6nC0FPUakMqOF7S5ZGM-URCkTR-sjddOY02Gz2XfOodrOia!1465666898";
        using (var stream = request.GetRequestStream())
        {
          stream.Write(data2, 0, data2.Length);
        }

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

        responseString = new StreamReader(response2.GetResponseStream()).ReadToEnd();
        return responseString;
    }
}

}

调试:如果我删除了“第2部分”下的所有内容,除了返回语句之外,第一个帖子就可以正常工作。在此之前,我在它自己的脚本节点中有第2部分,它成功地返回了数据,但是搜索结果丢失了。(因为会话信息/cookie信息没有结转)

重要注意:我已经在邮递员上完成了这两次请求,并且在那里成功地工作了。

任何关于如何通过流程图向本网站提交带有数据的帖子请求的想法,我们将不胜感激。:(

更新:在第二次请求中,我意识到我忘记了改变。

代码语言:javascript
复制
using (var stream = request.GetRequestStream())

要匹配响应对象‘request2’,请执行以下操作:

代码语言:javascript
复制
using (var stream = request2.GetRequestStream())

网络请求现在成功地工作了!解决了!

但是,我的问题仍然存在:如何使两个单独的请求共享cookie或会话,以及如何将连接标头属性设置为“保持-活动”?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-12 18:48:21

尝试为Web请求创建一个连接,并为会话键属性提供一个值。然后,对两个请求使用相同的连接,这将导致它们共享相同的cookie jar。您不需要手动尝试注入标头。

请注意,cookie jar的作用域位于Flowgear站点,并且在内存中,因此您可以将这两个请求放在不同的工作流中。例如:一个在父工作流中,一个在子工作流中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37194146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档