首页 > 解决方案 > 使用 cookie 进行 4GL GET 请求

问题描述

我必须向 API 发送一些数据,但对这个 api 的自动化是通过 cookie 进行的。因此,为了发送数据,我必须发送我的用户名和密码,作为响应,我得到 cookie,在响应正文中,我得到元素“sessionID”,其中包含该 cookie 的字符串值。在下一个 API 请求中,我需要使用该 cookie(或使用第一个 API 请求中存储的字符串值创建它)。如何在我现有的 API 请求程序中制作/集成 cookie 功能?如果我使用 Postman 应用程序发出请求,那么它会自动从第一个请求中保存 cookie 并在每个下一个请求中使用它。

我的问题的解决方案也是如此:

  1. 保存 cookie 并将其用于下一个请求?
  2. 保存字符串值并为每个下一个请求创建cookie?
  3. 将 cookie 存储到会话中并使用会话中的 cookie?
  4. 还有什么我没想到的?

我发送 GET 请求的过程如下。

USING System.Xml.* FROM ASSEMBLY.
USING System.Net.* FROM ASSEMBLY.
USING System.Collections.Specialized.* FROM ASSEMBLY.

ROUTINE-LEVEL ON ERROR UNDO, THROW.

/* ***************************  Definitions  ************************** */

DEFINE INPUT  PARAMETER cLink       AS CHARACTER NO-UNDO.
DEFINE INPUT  PARAMETER cUser       AS CHARACTER NO-UNDO.
DEFINE INPUT  PARAMETER cPass       AS CHARACTER NO-UNDO.
DEFINE OUTPUT PARAMETER lcResponse  AS LONGCHAR  NO-UNDO.

DEFINE VARIABLE wcClient        AS System.Net.WebClient                               NO-UNDO.
DEFINE VARIABLE nvValues        AS System.Collections.Specialized.NameValueCollection NO-UNDO.
DEFINE VARIABLE whcResponse     AS System.Net.WebHeaderCollection                     NO-UNDO.
DEFINE VARIABLE rsResponse      AS "System.Byte[]"                                    NO-UNDO.
DEFINE VARIABLE cRespHeader     AS CHARACTER                                          NO-UNDO.
DEFINE VARIABLE wpProxy         AS System.Net.WebProxy                                NO-UNDO.

/* ***************************  Main Block  *************************** */

wcClient = NEW System.Net.WebClient().
nvValues = NEW System.Collections.Specialized.NameValueCollection(). 
ASSIGN 
    nvValues["username"]    = cUser
    nvValues["password"]    = cPass 
    .

rsResponse = wcClient:UploadValues(cLink, nvValues).
lcResponse = System.Text.Encoding:Default:GetString(rsResponse).
cRespHeader = System.Text.Encoding:Default:GetString(rsResponse).

DELETE OBJECT nvValues.
DELETE OBJECT rsResponse.
DELETE OBJECT wcClient.

找到了一些用于 cookie 的 C# 代码,但不知道如何将其集成到我的程序中。

 CookieContainer cookieContainer = new CookieContainer();
 System.Net.Cookie userNameCookie = new System.Net.Cookie("user", "username");
 System.Net.Cookie passwordCookie = new System.Net.Cookie("password", "9848jf7s7ejhd");
 cookieContainer.Add(userNameCookie);
 cookieContainer.Add(passwordCookie);

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(produkt);
 request.CookieContainer = cookieContainer;

提前致谢

标签: cookiessession-cookiesprogress-4glsetcookie

解决方案


这个问题的解决方案是下一个

wcClient:Headers:ADD("Cookie","value_of_cookie_including_name").

花了很多时间测试,终于成功了。希望这个答案有人可以节省很多时间。


推荐阅读