cookies - 使用 cookie 进行 4GL GET 请求
问题描述
我必须向 API 发送一些数据,但对这个 api 的自动化是通过 cookie 进行的。因此,为了发送数据,我必须发送我的用户名和密码,作为响应,我得到 cookie,在响应正文中,我得到元素“sessionID”,其中包含该 cookie 的字符串值。在下一个 API 请求中,我需要使用该 cookie(或使用第一个 API 请求中存储的字符串值创建它)。如何在我现有的 API 请求程序中制作/集成 cookie 功能?如果我使用 Postman 应用程序发出请求,那么它会自动从第一个请求中保存 cookie 并在每个下一个请求中使用它。
我的问题的解决方案也是如此:
- 保存 cookie 并将其用于下一个请求?
- 保存字符串值并为每个下一个请求创建cookie?
- 将 cookie 存储到会话中并使用会话中的 cookie?
- 还有什么我没想到的?
我发送 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;
提前致谢
解决方案
这个问题的解决方案是下一个
wcClient:Headers:ADD("Cookie","value_of_cookie_including_name").
花了很多时间测试,终于成功了。希望这个答案有人可以节省很多时间。
推荐阅读
- datetime - 时间间隔内的 Pyspark 组数据帧
- python - 如果在数据帧的前一行中找到子字符串的第一个实例,则从行中删除
- c - 如何逐字计算文件中的元音数量并将结果附加到单词中?
- xamarin.forms - 对话框 xamarin 中的单选按钮组
- loops - 语法错误:变量用作值,Go 中的 for 循环
- c - 如何实现CRC-10算法
- javascript - 如何通过表单数据提交获取对象数组下的多个键值对
- reactjs - TypeError: Cannot assign to read only property ... - 使用 Redux 编辑 react-chartjs-2 数据集
- javascript - 我如何检查一个对象是否存在于数组中,如果它不在数组中以推送它
- android - 语音识别和录音机在某些设备中不能同时工作